Ssh

如何在 ssh 命令中禁用重試密碼

  • September 20, 2016

我希望 ssh 命令只允許一次輸入密碼的機會,如果第一次密碼錯誤,ssh 將返回

Permission denied (publickey......).

是否有一個標誌告訴 ssh 隻請求一次密碼?

代替:

[nir@dhcppc4 ~]$ ssh pokemon@192.168.1.103
pokemon@192.168.1.103's password: 
Permission denied, please try again.
pokemon@192.168.1.103's password: 
Permission denied, please try again.
pokemon@192.168.1.103's password: 
Permission denied (publickey.....).

我想:

[nir@dhcppc4 ~]$ ssh pokemon@192.168.1.103
pokemon@192.168.1.103's password: 
Permission denied (publickey.....).

解決方案必須在客戶端(例如 ssh 命令的某些標誌或使用管道),我無法觸摸sshd_config,或任何其他系統配置文件。因為 - 通常 - 我建構了訪問 LAN 中伺服器的第 3 方軟體(因此我無法生成密鑰或配置系統文件),所以密碼保存在數據庫中(因此不需要第二次嘗試)。在我的程式碼中,如果我能夠假設我只有一次嘗試ssh/scp它將簡化相關程式碼。

在 sshd 配置手冊頁中man 5 sshd_config

MaxAuthTries
    Specifies the maximum number of authentication attempts permitted
    per connection.  Once the number of failures reaches half this
    value, additional failures are logged.  The default is 6.

因此,設置MaxAuthTries 2將是您需要的設置。sshd之後需要重新啟動(必須以root身份執行):

/etc/init.d/ssh restart 

或者

service ssh restart

在客戶端,這可以使用 ssh 設置進行設置(查看man 5 ssh_config可以應用的設置):

NumberOfPasswordPrompts
        Specifies the number of password prompts before giving up.  The
        argument to this keyword must be an integer.  The default is 3.

所以編輯你的~/.ssh/config文件並添加:

Host <name_or_ip_of_host|*>
    NumberOfPasswordPrompts 1

您在<name_or_ip_of_host|*>命令行上使用的規範 IP 或主機名,或*所有主機連接嘗試的位置。您也可以在命令行上指定它,而無需編輯您的/.ssh/config文件:

 ssh -o NumberOfPasswordPrompts=1 user@hostname 

引用自:https://unix.stackexchange.com/questions/89949