从 shell 脚本绕过 ssh 密码提示

从 shell 脚本绕过 ssh 密码提示

我有一个 shell 脚本,可以使用公钥身份验证 ssh 进入服务器并在该计算机上运行命令。这在用户已在服务器上安装了公钥的计算机上运行良好。如果此脚本在用户未设置身份验证密钥的计算机上运行,​​则该脚本将停留在密码提示符处。我希望我的脚本继续执行,而不是卡在提示符下。如何绕过提示?我使用的是 Mac OSX。服务器也运行 OSX

答案1

执行此操作的一种方法是-o PasswordAuthentication=No在 SSH 命令中指定:

ssh -o PasswordAuthentication=no user@server

这将从 SSH 客户端必须与服务器对话的身份验证选项列表中删除 PasswordAuthentication,从而防止您坚持密码提示。请注意,这还允许除 PubkeyAuthentication 之外的其他身份验证机制(RHostsRSAAuthentication 等)起作用。如果您只想使用 pubkeyauthentication...

ssh -o PreferredAuthentications=publickey user@server

答案2

您可以编写一个 shell 脚本,在其中提供密码,该密码将自动登录 ssh 服务器。

但你应该有预计为此脚本安装的包。

在Redhat中,expect包是默认的。但在 Ubuntu 中你必须单独安装它。

您可以使用命令来检查:

$ rpm -qa | grep expect 对于红帽

$ dpkg -l expect对于Ubuntu

您可以编写一个 shell 脚本来提供 ssh 服务器的密码,如下所示:

#!/usr/bin/expect
spawn ssh user@ssh-server-ip   
expect "user@ssh-server-ip's password:"    
send "password\r"       
interact    

这个脚本应该可以完成你的任务。

相关内容