4

无论安全问题如何,我都想通过将密码放入脚本文件(以明文形式)来自动化 ssh 登录。例如,我尝试了以下,但没有成功......

回声“我的密码”| ssh -X root@remote_node_address

它仍然提示输入密码...

编辑:我知道设置无密码 ssh(实际上已经这样做了)。我真正的问题是如何自动化设置无密码 ssh 的过程......

4

3 回答 3

9

使用 Expect 自动化

您可以使用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根据手动会话生成您自己的自定义脚本。

于 2012-09-02T16:27:14.900 回答
2

您将需要使用公钥身份验证,请参阅

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
于 2012-09-02T15:22:05.110 回答
0

我最近遇到空。我很惊讶它似乎并不为人所知,因为当出现“如何自动化 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"
于 2014-05-07T15:09:16.847 回答