7

我意识到这个问题已被问过几次,但我在搜索的任何地方都找不到相关的答案。

我在一个安全不是问题的开发环境中工作,任何人只要考虑几秒钟就可以猜出密码。

我想做的很简单。我在我的本地 .bashrc 文件中创建了一个别名函数,我希望这个函数能够使用默认密码自动登录机器。

我当前的实现看起来像这样:

function s () { 
 ssh root@192.168.1.$1
}

当我运行它时,我会得到这样的东西:

~]s 122

ssh root@192.168.1.122

root@192.168.1.122's password: 

使用 Bash,而不是使用 RSA 密钥我想让它使用默认密码“密码”。

我已经尝试了以下已设置 IP 和用户的方法。

Do=$(expect -c "
spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
expect \"yes/no\" 
send \"yes\r\" 
expect \"assword\" send \"password\"")
echo $Do
$Do

它给出了以下错误:

Connecting and logging into server using expect
usage: send [args] string
    while executing
"send"
    invoked from within
"expect "assword" send "password""
 Administrator@192.168.1.176's password:
bash: spawn: command not found...

使用以下命令,我可以连接机器。如果我删除了交互,它只会运行 uptime 命令并关闭连接。使用交互命令,我无法看到我正在输入的内容或实际与机器交互。有任何想法吗?

Do=$(expect -c "spawn ssh $User@${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]}; set timeout 4; expect \"assword\"; send \"password\n\"; expect \"test\"; send \"uptime\n\"; interact;");echo $Do;
4

2 回答 2

8

您可以使用该expect工具执行此操作:http: //expect.sourceforge.net/

它广泛可用,因此取决于您的系统,相当于sudo apt-get install expectyum install expect将安装它。

expect这是一个带有 ssh的脚本示例。这会让您登录并让您控制交互式提示:

#!/usr/bin/expect

set login "root"
set addr "127.0.0.1"
set pw "password"

spawn ssh $login@$addr
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

下面是一个示例,说明如何将其expect用作 bash 脚本的一部分。这使用 ssh 登录,cd 到 /var,运行脚本,然后退出 ssh 会话。

#!/bin/bash
...

login_via_ssh_and_do_stuff() {

    # build the expect script in bash

    expect_sh=$(expect -c "
    spawn ssh root@127.0.0.1
    expect \"password:\"
    send \"password\r\"
    expect \"#\"
    send \"cd /var\r\"
    expect \"#\"
    send \"chmod +x my_script.sh\r\"
    expect \"#\"
    send \"./my_script.sh\r\"
    expect \"#\"
    send \"exit\r\"
    ")

    # run the expect script
    echo "$expect_sh"
}

您可以将这些片段保留在本地系统上的脚本中,然后只为脚本设置别名。

另外:我知道你说安全不是问题,但我想再次指出,不使用密码的 ssh 的“正确”方法是使用 ssh 密钥对 =)

于 2012-11-08T21:56:47.500 回答
6

使用sshpass主要 Linux-es 上的包存储库中可用的。

例如,当密码在password.txt文件中时:

sshpass -fpassword.txt ssh username@hostname

sshpass运行ssh在一个专用的tty,欺骗它以为它正在从交互式用户那里获取密码。

于 2013-12-23T17:36:36.893 回答