我有一个 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
这个脚本应该可以完成你的任务。