2012-08-14 48 views
0

测试远程访问,我有以下命令来检查,如果远程客户端许可证使用ssh登录,而无需通过使用ssh

ssh -o PasswordAuthentication=no \ 
    [email protected]$REMOTE_HOST_IP 1>/dev/null 2>/dev/null 

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

ssh -o PasswordAuthentication=no [email protected]$REMOTE_HOST_IP 

这次工作。

那么,如何安排它发送错误消息的第一时间,而不是在休息

编辑发:我可以解释简单,我的questin是,说我在我的脚本命令可以给出错误我第一次运行我的脚本,所以我不希望看到erorrs和输出,我运行它

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

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

+0

第一个命令中没有输出或错误消息,因为您将STDOUT和STDERR都发送到/ dev/null,这是数据接收器,所有内容都被丢弃。 我不明白你的问题的其余部分。请澄清。 – mpe 2012-08-14 09:29:31

+0

@mpe是没有错误信息在我发送的第一个原因。但在deffaault它必须给予权限被拒绝的消息,所以我发送到dev null.at我有权限的脚本的其余部分。当我第二次运行脚本。该命令挂起因为没有错误消息,因为我有证书到达client.so我需要第二次工作命令 – barp 2012-08-14 09:33:01

+0

注意:'>/dev/null 2>&1'是'1>/dev的常见习惯用法/ null 2>/dev/null'。在极少数情况下,我会使用'>& - 2> & -';这实际上会关闭fd 1和2 - 但谨慎使用 - 不是所有类似的命令。 – 2012-08-14 11:19:48

回答

1

添加一条命令在另一端执行。

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

[email protected]$REMOTE_HOST_IP 

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

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

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

1

目前尚不清楚你正在尝试做什么。

如果你不指定命令,ssh会创建一个shell,但是你的所有输出都是定向/dev/null,所以你什么都看不到。它看起来像被吊死了,但事实并非如此,它只是在等待你输入comamnds。如果输入exit + ENTER,它将从shell中退出。

ssh -o PasswordAuthentication=no [email protected]$REMOTE_HOST_IP 'command here' 
1

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

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