我需要创建一个自动向OpenSSH ssh客户端输入密码的脚本。

假设我需要使用密码a1234b SSH到myname@somehost。

我已经试过了……

#~/bin/myssh.sh
ssh myname@somehost
a1234b

...但这并不奏效。

如何将此功能放入脚本中?


当前回答

如果您在Windows系统上执行此操作,您可以使用Plink (PuTTY的一部分)。

plink your_username@yourhost -pw your_password

其他回答

如果您在Windows系统上执行此操作,您可以使用Plink (PuTTY的一部分)。

plink your_username@yourhost -pw your_password

首先需要安装sshpass。

Ubuntu/Debian: apt-get安装sshpass Fedora/CentOS: yum安装sshpass Arch:吃豆人-S sshpass


例子:

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM

自定义端口示例:

sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400

注:

当传递-f标志时,Sshpass还可以从文件中读取密码。 使用-f可以防止在执行ps命令时密码显示。 存储密码的文件应具有安全权限。

在ubuntu linux -

ssh username@server_ip_address -p port_number

按enter键,然后输入服务器密码

如果您不是root用户,请在命令的开头添加sudo

您可以使用expect脚本。我没有写一个在相当长的一段时间,但它应该如下所示。您需要在脚本前面加上#!/usr/bin/expect

#!/usr/bin/expect -f
spawn ssh HOSTNAME
expect "login:" 
send "username\r"
expect "Password:"
send "password\r"
interact

Sshpass + autossh

前面提到的sshpass的一个好处是,您可以将它与autossh一起使用,从而消除了更多交互效率低下的问题。

sshpass -p mypassword autossh -M0 -t myusername@myserver.mydomain.com

这将允许自动重新连接,如果你的wifi被打断,关闭你的笔记本电脑。

有一个跳转主机

sshpass -p `cat ~/.sshpass` autossh -M0 -Y -tt -J me@jumphost.mydomain.com:22223 -p 222 me@server.mydomain.com