Max*_*Max 125 linux ssh bash expect
对于那些想要回复我应该使用SSH密钥的人请弃权
我正在尝试在bash脚本中使用expect来提供SSH密码.提供密码是有效的,但我不会像我应该的那样在SSH会话中结束,它会回到海峡.
我的剧本:
#!/bin/bash
read -s PWD
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com'
expect "password"
send "$PWD\n"
EOD
echo "you're out"
Run Code Online (Sandbox Code Playgroud)
我脚本的输出:
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
usr@$myhost.example.com's password: you're out
Run Code Online (Sandbox Code Playgroud)
我想拥有我的SSH会话,只有当我退出它才能返回我的bash脚本.我之前使用bash的原因是因为我使用了一个菜单,我可以选择连接哪个单元.
谢谢
Pio*_*ról 78
混合bash和expect并不是达到预期效果的好方法.我试着只使用Expect:
#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
#use correct prompt
set prompt ":|#|\\\$"
interact -o -nobuffer -re $prompt return
send "my_password\r"
interact -o -nobuffer -re $prompt return
send "my_command1\r"
interact -o -nobuffer -re $prompt return
send "my_command2\r"
interact
Run Code Online (Sandbox Code Playgroud)
bash的示例解决方案可以是:
#!/bin/bash
/usr/bin/expect -c 'expect "\n" { eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com; interact }'
Run Code Online (Sandbox Code Playgroud)
这将等待进入和返回(暂时)交互式会话.
dot*_*nix 52
最简单的方法是使用sshpass.这在Ubuntu/Debian repos中可用,您不必处理将expect与bash集成.
一个例子:
sshpass -p<password> ssh <arguments>
sshpass -ptest1324 ssh user@192.168.1.200 ls -l /tmp
Run Code Online (Sandbox Code Playgroud)
上面的命令可以很容易地与bash脚本集成.
注意:请阅读安全注意事项部分,man sshpass
以全面了解安全隐患.
dr-*_*jan 18
在您的EOD之前添加'interact'prepect命令:
#!/bin/bash
read -s PWD
/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
expect "password"
send "$PWD\n"
interact
EOD
echo "you're out"
Run Code Online (Sandbox Code Playgroud)
这可以让您与远程计算机进行交互,直到您注销.然后你会回到bash.
dam*_*n_c 15
在寻找问题答案数月后,我终于找到了一个非常好的解决方案:编写一个简单的脚本.
#!/usr/bin/expect
set timeout 20
set cmd [lrange $argv 1 end]
set password [lindex $argv 0]
eval spawn $cmd
expect "Password:"
send "$password\r";
interact
Run Code Online (Sandbox Code Playgroud)
把它/usr/bin/exp
,然后你可以使用:
exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
完成!
还要确保使用
send -- "$PWD\r"
Run Code Online (Sandbox Code Playgroud)
相反,因为以短划线( - )开头的密码将失败.
上面不会解释以短划线开头的字符串作为send命令的选项.
小智 7
一个简单的期望脚本
#!/usr/bin/expect
set user [lindex $argv 1]
set ip [lindex $argv 0]
set password [lindex $argv 2]
spawn ssh $user@$ip
expect "password"
send "$password\r"
interact
Run Code Online (Sandbox Code Playgroud)
例:
./Remotelogin.exp <ip> <user name> <password>
Run Code Online (Sandbox Code Playgroud)
我发现使用Bash 脚本中的小型Expect 脚本有用的另一种方法如下。
...
Bash script start
Bash commands
...
expect - <<EOF
spawn your-command-here
expect "some-pattern"
send "some-command"
...
...
EOF
...
More Bash commands
...
Run Code Online (Sandbox Code Playgroud)
这有效,因为 ...If the string "-" is supplied as a filename, standard input is read instead...
归档时间: |
|
查看次数: |
353483 次 |
最近记录: |