0

我有以下命令来检查远程客户端是否允许不通过 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

这次有效。

那么我该如何安排它第一次发送错误消息而不是在休息时发送

编辑:正如我可以简单解释的那样,我的问题是,假设我的脚本中有一个命令,在我第一次运行我的脚本时可能会出错,所以我不想看到错误和输出,我运行它

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

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

4

3 回答 3

1

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

我通常使用:or 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

你剩下的问题不是很清楚。

于 2012-08-14T09:38:21.490 回答
1

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

如果您不指定命令,ssh将创建一个 shell,但您的所有输出都是定向的/dev/null,因此您什么也看不到。它看起来像是挂了,但不是,它只是在等你输入命令。如果键入exit+ ENTER,它将退出 shell。

ssh -o PasswordAuthentication=no $REMOTE_HOST_USER@$REMOTE_HOST_IP 'command here'
于 2012-08-14T10:53:43.620 回答
1

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

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

于 2012-08-14T10:58:22.050 回答