我想通过 ssh 批量运行命令并让调用机器确定该命令的退出状态和输出,但密码是预先知道的并且不是手动输入的。
This似乎是我想要的,但它不起作用。
飞行前检查:
#> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null testuser@localhost 'echo here' && echo ok || echo no
Warning: Permanently added '[localhost]:22' (ECDSA) to the list of known hosts.
testuser@localhost's password:
here
ok
好的开始。现在将其与 SSH_ASKPASS 捆绑在一起
#!/bin/bash
u="testuser"
p="testpassword"
ask="/tmp/ask"
echo "echo $p" > $ask
chmod +x $ask
SSH_ASKPASS=$ask
DISPLAY=localhost:0.0
setsid ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null $u@localhost 'echo here' && echo ok || echo no
忽略安全问题,这只是一个 POC。
当我运行它时
#> /tmp/test.sh
Warning: Permanently added '[localhost]:22' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
no
怎么了?
最佳答案
你需要导出环境变量来申请你的ssh
命令:
export DISPLAY
export SSH_ASKPASS
使用 -vvv
运行 ssh
会告诉您未使用 SSH_ASKPASS
命令。
关于linux - 使用 SSH_ASKPASS 的 ssh 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718550/