使用ssh测试远程访问

时间:2012-08-14 09:25:43

标签: bash shell ssh

我有以下命令检查远程客户端是否允许使用ssh登录而不传递

 ssh -o PasswordAuthentication=no \
     $REMOTE_HOST_USER@$REMOTE_HOST_IP 1>/dev/null 2>/dev/null

执行命令,如果permission=no我在其余代码中设置权限。顺便说一句,“permissin denied消息被发送到/ dev / null”。但是当我第二次执行我的命令时,这次permission=yes我必须登录到机器但是因为我认为没有错误或输出而挂起。因为我在代码中获得了许可时尝试过它;

ssh -o PasswordAuthentication=no $REMOTE_HOST_USER@$REMOTE_HOST_IP

这次有效。

那么如何安排它首次发送错误信息而不是静止发送

编辑:我可以解释一下,我的问题是,我说我的脚本中有一个命令可以在我第一次运行脚本时给出错误,所以我不想看到erorrs和输出,我把它作为

command 1>/dev/null 2>/dev/null(it is in my script)

当我第二次运行脚本时,该命令不会给出错误和输出因为我做了一些操作所以它没有错误。但是当它第二次运行它因为/ dev / null而挂起(我想是这样)。因为当它没有/ dev / null运行时它可以正常工作

3 个答案:

答案 0 :(得分:1)

添加要在另一侧执行的命令。

我通常使用:echo ok。第一个不应该产生任何输出,我喜欢错误消息。

remote_account=$REMOTE_HOST_USER@$REMOTE_HOST_IP 

ssh -o PasswordAuthentication=no $remote_account : 2> /dev/null

ssh -o PasswordAuthentication=no $remote_account echo ok | grep ok

你的其余问题不是很清楚。

答案 1 :(得分:1)

目前尚不清楚你要做什么。

如果您没有指定命令,ssh将创建一个shell,但您的所有输出都是/dev/null,因此您看不到任何内容。它看起来像是被绞死了,但事实并非如此,它只是在等你输入comamnds。如果您键入exit + ENTER,它将退出shell。

ssh -o PasswordAuthentication=no $REMOTE_HOST_USER@$REMOTE_HOST_IP 'command here'

答案 2 :(得分:1)

脚本不会挂起,因为没有错误消息。它挂起,因为ssh正在等待你的输入。如果你给ssh一个命令来运行,正如Henk所示,那么ssh将运行该命令然后退出。如果你没有给它一个命令,它将启动一个交互式shell。 shell打印一个提示符(例如“$”)并等待您输入。您无法看到提示,因为您要将所有输出发送到/dev/null

Henk的代码将使您的脚本正常工作,因为如果它成功登录,它将运行一个非常短的命令,然后将控制权返回给您。