我正在从一台远程计算机连接到一个网络内的多台远程计算机。所有远程计算机的用户名和密码都是相同的。我想编写一个脚本,该脚本将使用我的用户名并传递登录到机器。我无法在主机上安装任何工具(expect 或 sshpass)。将公钥复制到目标远程计算机没有任何意义,因为我很少多次连接到同一台计算机。每天都有新机器。
是否可以在主机上设置 ssh 以便能够连接到远程计算机,而无需在目标计算机上进行设置?
我用来连接到网络其余部分的本地计算机 -SUSE Linux 企业服务器 11 SP3
答案1
expect
考虑到我将在本地计算机上安装并使用它来添加新命令的要求。让我们将远程主机称为one
和many1
,many2
将本地计算机称为mybox
。像这样的东西(未经测试)
#!/usr/bin/expect
# connect to "one"
spawn ssh username@one
# next lines shouldn't be needed, should have shared keys for "one"
expect "assword: "
# provide password for "one", ending with "\r"
send -- "the_password_for_username@one\r"
# mainloop
interact "~p" {
send "ssh manyuser@[lindex $argv 0]\r"
expect "yes/no)? " { send "yes\r" exp_continue } "assword: "
send "the_password_for_many\r"
}
mybox
在as上运行它./script many1
,它会将您连接到one
然后,当您想连接时,many1
只需键入~p
.它将运行 ssh 命令,回答“您想连接吗”问题(如果询问),并提供密码。
当然,关于在脚本中存储密码的不安全性的标准评论也适用。另一个小缺点是您需要为此指定一个按键序列。我在这里使用~p
,但你可以使用功能键。