尽管存在安全问题,我希望通过将密码以明文形式放入脚本文件中来自动化ssh登录。例如,我尝试了以下操作,但没有成功...
echo "mypassword" | ssh -X root@remote_node_address
它仍然提示输入密码...
编辑:我知道如何设置无需密码的ssh(实际上已经做过了)。我的问题实际上是如何自动化设置无需密码的ssh过程...
尽管存在安全问题,我希望通过将密码以明文形式放入脚本文件中来自动化ssh登录。例如,我尝试了以下操作,但没有成功...
echo "mypassword" | ssh -X root@remote_node_address
它仍然提示输入密码...
编辑:我知道如何设置无需密码的ssh(实际上已经做过了)。我的问题实际上是如何自动化设置无需密码的ssh过程...
您可以使用Expect来驱动SSH密码身份验证。例如:
#!/usr/bin/expect -f
set timeout -1
spawn ssh -o PubkeyAuthentication=no host.example.com
expect -exact "Password: "
send -- "secret\r"
expect {\$\s*} { interact }
这个脚本是一个非常基础的例子,在面对故障或在非标准远程TERM(如GNU screen)下运行时,并不特别健壮,但它适用于常见情况。您也可以使用expect-dev软件包中的/usr/bin/autoexpect根据手动会话生成自己的自定义脚本。
您需要使用公钥身份验证,详情请参见
http://www.ece.uci.edu/~chou/ssh-key.html
为了为现有主机添加新密钥,您需要自动更新远程计算机上的~/.ssh/authorized_keys中的公钥。
这很容易完成,只需使用
ssh-keygen -t rsa -b 1024 -f ~/.ssh/new-key -P ""
cat ~/.ssh/new-key.pub | ssh root@target-host 'cat >> ~/.ssh/authorized_keys'
ssh -i ~/.ssh/new-key root@remote-host
我最近遇到了empty。我很惊讶它似乎不是很出名,因为当类似“如何自动化ssh”这样的问题出现时,很少被提及。
我在openwrt上使用它,它的大小仅约为7KB,无需其他依赖项,而tcl包的大小约为440KB。您可以直接在shell中使用它。
“empty是一个实用程序,提供了一个接口来执行和/或与伪终端会话(PTY)下的进程进行交互。该工具在编写用于与交互式程序通信的shell脚本方面绝对有用,例如telnet、ssh、ftp等。在某些情况下,empty可能是TCL / expect或其他类似编程工具的最简单替代品”
例如:
#!/bin/sh
empty -f -i in -o out telnet foo.bar.com
empty -w -i out -o in "ogin:" "luser\n"
empty -w -i out -o in "assword:" "TopSecret\n"
empty -s -o in "who am i\n"
empty -s -o in "exit\n"