我发现这个问题已被问过几次,但我在搜索的任何地方找不到相关的答案。
我正在开发环境中工作,安全性不是问题,如果想到几秒钟,任何人都可以猜测密码。
我想做的很简单。我在我的本地.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密钥我想让它使用默认密码'password'。
我已尝试过以下设置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命令并关闭连接。使用interaction命令,我无法看到我正在键入的内容或实际与机器进行交互。有什么想法吗?
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;
答案 0 :(得分:7)
您可以使用expect
工具执行此操作:http://expect.sourceforge.net/
它可以广泛使用,因此根据您的系统,相当于sudo apt-get install expect
或yum install expect
会安装它。
以下是带有ssh的expect
脚本的示例。这会让您登录并让您控制交互式提示:
#!/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密钥对=)< / p>
答案 1 :(得分:4)
使用主要Linux-es上的软件包存储库中提供的 sshpass
。
例如,当密码在password.txt
文件中时:
sshpass -fpassword.txt ssh username@hostname
sshpass
在专用ssh
中运行tty
,愚弄它以为它是 从交互式用户那里获取密码。