Shell 编程中,在循环里使用ssh免密远程执行命令的注意事项

前提:给自己机器配置ssh免密登录
#!/bin/bash
cat << ‘EOD‘ > list
1
2
3
4
EOD

while read line
do
if ssh [email protected] "test -f /tmp/a.sh"; then #配置了免密登录,此处不用输入密码
echo "$line file exist."
else
echo "$line file not exist."
fi
done < list

问题:按理,list文件里有4行,这个while循环应该会执行4次才对,为何这个只执行了一次呢?

答案如下:

检查ssh选项,发现

-n      Redirects stdin from /dev/null (actually, prevents reading from stdin).  This must be used when ssh is run in the background.  A

common trick is to use this to run X11 programs on a remote
machine.  For example, ssh -n shadows.cs.hut.fi emacs & will start

an emacs on shadows.cs.hut.fi, and the X11 connection will
be automatically forwarded over an encrypted channel.  The ssh pro-

gram will be put in the background.  (This does not work if
ssh needs to ask for a password or passphrase; see also the -f

option.)

可以说这个选项是专门用来解决这个问题的。用/dev/null来当ssh的输入,阻止ssh读取本地的标准输入内容。

#要想使本脚本执行次数正常,ssh命令需要添加-n选项即可。

https://blog.csdn.net/notsea/article/details/42028359

原文地址:https://www.cnblogs.com/Reggie/p/9114147.html

时间: 2024-08-24 14:47:29

Shell 编程中,在循环里使用ssh免密远程执行命令的注意事项的相关文章

shell 脚本实战笔记(8)--ssh免密码输入执行命令

前言: ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.本文讲解了两种方式, 一种借助expect脚本, 一种借助sshpass来实现. *) 借助expect脚本来实现1. expect不是系统自带的工具, 需要安装yum install expect -y 2. expect脚本的编写规则 1. [#!/usr/bin/expect] 告知系统脚

Linux下使用SSH非交互式远程执行命令脚本---ssh无密码登陆

通过SSH命令远程执行命令首先需要建立相关主机间的信任关系.否则,在执行命令前SSH命令会提示你输入远程主机的密码.建立主机间信任关系的方法如下-即ssh无密码输入: 假设我们有两台主机.主机名分别为linuxa和linuxb.首先在linuxa上以当前用户运行如下命令生成本主机的公钥和私钥文件: ssh-keygen -t rsa     上述命令执行后,隐藏目录~/.ssh下会出现两个文件:id_rsa和id_rsa.pub.其中,id_rsa.pub为公钥文件. 将该文件的内容追加到对端主

ssh免密远程登录(一)

--------------------------------------------------超级用户下,ssh免密登录------------------------------------ 环境介绍: 主机1:ip 192.168.200.142 主机2:ip 192.168.200.158 用户要求:主机一 对 主机二 进行免密登录. 命        令:ssh scp ,     需要安装包:openssh-clients 免密过程: 1, ssh-keygen -t rsa (

Linux下配置ssh免密远程登录

步骤 使用ssh-keygen生成密钥对 提示要求输入保存的位置,密码等信息.全部使用默认信息即可 使用ssh-copy-id [email protected]将公钥拷贝到需要免密登录的服务器的账户中. 例如,需要免密登录192.168.199.124的pi用户,则需要ssh-copy-id [email protected],输入pi用户的密码. 以后即可免密登录到该账户. 原文地址:https://www.cnblogs.com/zhuxiaoxi/p/8430740.html

利用sshpass和ssh编写脚本远程执行命令

import subprocess import os (rfd, wfd) = os.pipe() arg = "-d%d" % rfd try: p = subprocess.Popen(["sshpass",arg,"ssh","-l","haohzhang","phxaishdc9dn1447.stratus.phx.ebay.com","ls","

【转】ssh 远程执行命令

原文:https://blog.csdn.net/liuxiao723846/article/details/82667482 SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作.接下来我们详细讲解一些常用的情况. 1.执行简单的命令: 1)查看某台主机上的磁盘使用情况: $ ssh [email protected]1.113.195.138 "df -h" *************************************************

ssh 远程执行命令

SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结. 远程执行命令 如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 df 命令呢?当然不是的,我们可以使用 ssh 命令在远程的主机上执行 df 命令,然后直接把结果显示出来.整个过程就像是在本地执行了一条命令一样: $ ssh [email prote

[转帖]ssh 远程执行命令

https://www.cnblogs.com/youngerger/p/9104144.html SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进行一个小小的总结. 远程执行命令 如果我们要查看一下某台主机的磁盘使用情况,是不是必须要登录到目标主机上才能执行 df 命令呢?当然不是的,我们可以使用 ssh 命令在远程的主机上执行 df 命令,然

shell远程执行命令(命令行与脚本)

ssh远程执行 前提条件:配置ssh免密登录 简单命令: ssh [email protected] "cd /home ; ls" 基本能完成常用的对于远程节点的管理了,几个注意的点: 双引号,必须有.如果不加双引号,第二个ls命令在本地执行. 分号,两个命令之间用分号隔开. 对于脚本方式: #!/bin/bash ssh [email protected] > /dev/null 2>&1 << eeooff cd /home touch abcde