我正在制作一个脚本,从传递到 ssh 的过程中读取密码,如果找不到主机名,我想停止该脚本,但我不知道如何读取 ssh 的输出
我试过了
test=$(ssh user@nonvalidip)
check="ssh: Could not resolve hostname nonvalidip: Name or service not known"
if [ $test = $check ]; then
echo "Please enter a valid ip"
fi
但是 $test 是空的,我怎样才能读取 ssh 的输出并将其作为测试变量?
最佳答案
假设您正在尝试运行 shell 脚本以通过 SSH 通过系统获得访问权限,然后如果该连接成功则运行命令。要做到这一点,您可以做很多事情,这些事情比尝试使解释更少的语言工作要简单得多。我强烈建议解决第一个问题是在脚本中制作一个较小的脚本。比如做这样的事情:
ssh user@known_address << EOF
- 这将启动 session 并保持其下的所有内容运行,直到达到 EOF
如果您也在 Linux 行业,使用它可能对您以后有所帮助。该脚本应如下所示:
ssh user@known_address << EOF
scp /etc/passwd USER@your_address/Path
EOF
- 请注意,这是您可以执行的操作的示例,但将密码文件的额外副本放在其他系统上并不是很明智。
然后,您可以简单地使用退出代码,而不是使用系统输出的精确副本。在此过程中,这可能会更有帮助。您可以收到使用 echo $?
运行的最后一条命令的错误代码
我不能保证这个脚本会工作,但这里有一个你可以做什么的例子
session() {ssh user@add << EOF; command1; command2; command3; EOF}; session; if $? == 1; echo "test failed".
Sources
https://www.shellhacks.com/ssh-execute-remote-command-script-linux/
关于linux - 将输出发送到另一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641630/