如何创建一个bash脚本来检查SSH连接?(How to create a bash script

2019-07-17 15:15发布

我是在创造一个bash脚本,将登录到远程计算机,并创建私钥和公钥的过程。

我的问题是远程计算机不是很可靠,他们并不总是起来。 我需要一个bash脚本,如果SSH连接到了那会检查。 其实之前创造未来使用的密钥。

Answer 1:

你可以用返回值SSH给你检查:

$ ssh -q user@downhost exit
$ echo $?
255

$ ssh -q user@uphost exit
$ echo $?
0

编辑:另一种方法是使用的nmap(你不需要有键或登录-东西):

$ a=`nmap uphost -PN -p ssh | grep open`
$ b=`nmap downhost -PN -p ssh | grep open`

$ echo $a
22/tcp open ssh
$ echo $b
(empty string)

但你必须到grep消息(NMAP不使用返回值显示,如果一个端口过滤,关闭或打开)。

EDIT2:

如果你有兴趣的SSH端口的实际状态,您也可以替换grep openegrep 'open|closed|filtered'

$ nmap host -PN -p ssh | egrep 'open|closed|filtered'

只要是完整的。



Answer 2:

ssh -q -o "BatchMode=yes" -i /home/sicmapp/.ssh/id_rsa <ID>@<Servername>.<domain> "echo 2>&1" && echo $host SSH_OK || echo $host SSH_NOK


Answer 3:

您可以使用这样的事情

$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)

这将输出“OK”,如果SSH连接就可以了



Answer 4:

补充的响应@Adrià Cidre你可以这样做:

status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 user@host echo ok 2>&1)

if [[ $status == ok ]] ; then
  echo auth ok, do something
elif [[ $status == "Permission denied"* ]] ; then
  echo no_auth
else
  echo other_error
fi


Answer 5:

尝试:

echo quit | telnet IP 22 2>/dev/null | grep Connected


Answer 6:

万一有人只希望检查端口22是在远程计算机上打开时,这个简单的netcat的命令非常有用。 我用它,因为NMAP和telnet是不适用于我。 此外,我的ssh配置使用键盘密码身份验证。

它是由GUESSWHOz提出的解决方案的一个变种。

nc -q 0 -w 1 "${remote_ip}" 22 < /dev/null &> /dev/null && echo "Port is reachable" || echo "Port is unreachable"


Answer 7:

如果您想查询一个远程文件夹存在,或任何其他文件测试真正做到:

if [ -n "$(ssh "${user}@${server}" [ -d "$folder" ] && echo 1; exit)" ]; then
    # exists
else
    # doesn't exist
fi

不要忘记引号"$(ssh ...)"



Answer 8:

要连接到具有多个接口的服务器

ssh -o ConnectTimeout=1 -q Necktwi@192.168.1.61;[ $? = 1 ] || ssh -o ConnectTimeout=1 -q Necktwi@192.168.1.51


Answer 9:

例如使用bash脚本4+:

# -- ip/host and res which is result of nmap (note must have nmap installed)
ip="192.168.0.1"
res=$(nmap ${ip} -PN -p ssh | grep open)

# -- if result contains open, we can reach ssh else assume failure) --
if [[ "${res}" =~ "open" ]] ;then
    echo "It's Open! Let's SSH to it.."
else
    echo "The host ${ip} is not accessible!"
fi


Answer 10:

我觉得你是想在这里解决错误的问题。 你不应该试图使SSH守护程序更加稳定? 试运行像monit的 ,这将检查是否守护进程正在运行,并重新启动它,如果它不(给你时间去寻找背后sshd的根本问题上,你关机)。 或者是网络服务的麻烦? 试着看一下man ifup 。 难道整个该死的东西只是想关闭你吗? 嗯,这是一个更大的问题...尝试看你的日志(开始的syslog)发现,被关闭的Boxen有向下硬件故障或服务(可能是温度监控器?)。

使你的脚本容错是伟大的,但你也可能想使你的Boxen有容错。



文章来源: How to create a bash script to check the SSH connection?