我需要创建一个自动向OpenSSH ssh客户端输入密码的脚本。
假设我需要使用密码a1234b SSH到myname@somehost。
我已经试过了……
#~/bin/myssh.sh
ssh myname@somehost
a1234b
...但这并不奏效。
如何将此功能放入脚本中?
我需要创建一个自动向OpenSSH ssh客户端输入密码的脚本。
假设我需要使用密码a1234b SSH到myname@somehost。
我已经试过了……
#~/bin/myssh.sh
ssh myname@somehost
a1234b
...但这并不奏效。
如何将此功能放入脚本中?
当前回答
Solution1:使用sshpass
#~/bin/myssh.sh
sshpass -p a1234b ssh myname@somehost
您可以通过
# Ubuntu/Debian
$ sudo apt-get install sshpass
# Red Hat/Fedora/CentOS
$ sudo yum install sshpass
# Arch Linux
$ sudo pacman -S sshpass
#OS X
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
或从这里下载源代码
tar xvzf sshpass-1.08.tar.gz
cd sshpass-1.08.tar.gz
./configure
sudo make install
解决方案2:设置SSH无密码登录
假设您需要使用密码2b2b2b从aaa@1.1.1.1(客户端服务器A) SSH到bbb@2.2.2.2(远程服务器B)。
在A中使用如下命令生成公钥(.ssh/id_rsa.pub)和私钥(.ssh/id_rsa)
ssh-keygen -t rsa
[Press enter key]
[Press enter key]
[Press enter key]
使用以下命令将生成的公钥(.ssh/id_rsa.pub)以文件名authorized_keys分发到bbb的.ssh目录下的服务器B
ssh-copy-id bbb@2.2.2.2
第一次ssh登录需要输入密码,以后会自动登录,不需要再次输入!
ssh bbb@2.2.2.2 [Enter]
2b2b2b
然后你的剧本就可以
#~/bin/myssh.sh
ssh myname@somehost
其他回答
在脚本中使用脚本tossh,第一个参数是主机名,第二个参数是密码。
#!/usr/bin/expect
set pass [lindex $argv 1]
set host [lindex $argv 0]
spawn ssh -t root@$host echo Hello
expect "*assword: "
send "$pass\n";
interact"
使用公钥认证:https://help.ubuntu.com/community/SSH/OpenSSH/Keys
在源主机中只运行一次:
ssh-keygen -t rsa # ENTER to every field
ssh-copy-id myname@somehost
这就是全部,之后你就可以不用密码使用ssh了。
我有一个更好的解决方案,包括登录您的帐户,而不是更改为根用户。 它是一个bash脚本
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
这基本上是abbotto的答案的扩展,有一些额外的步骤(针对初学者),使启动你的服务器,从你的linux主机,非常容易:
编写一个简单的bash脚本,例如:
#!/bin/bash
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no <YOUR_USERNAME>@<SEVER_IP>
保存文件,例如'startMyServer',然后在你的终端上运行这个命令使文件可执行:
sudo chmod +x startMyServer
将文件移动到“PATH”变量中的文件夹(在终端中运行“echo $PATH”查看这些文件夹)。例如,将它移动到'/usr/bin/'。
瞧,现在你可以通过在终端中输入'startMyServer'进入服务器。
P.S.(1)这不是很安全,请查看ssh密钥以获得更好的安全性。
附注(2)SMshrimant的答案很相似,对一些人来说可能更优雅。但我个人更喜欢使用bash脚本。
如果您在Windows系统上执行此操作,您可以使用Plink (PuTTY的一部分)。
plink your_username@yourhost -pw your_password