无论安全问题如何,我都想通过将密码放入脚本文件(以明文形式)来自动化 ssh 登录。例如,我尝试了以下,但没有成功......
回声“我的密码”| 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 屏幕)下运行时并不是特别健壮,但它适用于常见情况。您还可以使用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
我最近遇到空。我很惊讶它似乎并不为人所知,因为当出现“如何自动化 ssh”之类的问题时很少有人谈论它。
我在 openwrt 上使用它,它有一个大小约为 7KB 的包,没有依赖关系,而 tcl 包约为 440KB。你可以直接在shell中使用它。
“empty 是一个实用程序,它提供了一个接口来在伪终端会话 (PTY) 下执行和/或与进程交互。这个工具在设计用于与 telnet、ssh、ftp 等交互式程序通信的 shell 脚本编程中绝对有用. 在某些情况下,空可以是 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"