bash and python远程执行本地脚本方法

Run local python script on remote server

#!/bin/bash
#--------------------------------------------------------------
ip_array=("192.168.7.201")
user="root"
#本地脚本
#remote_up="/home/chengjiu_su/bash/mysql_merge.bash"
remote_up="/home/chengjiu_su/PycharmProjects/automatic/process_conf.py"
#进行主机for循环,远程执行本地脚本
for ip in  ${ip_array[*]}
do
    #ssh  -o StrictHostKeyChecking=no ${user}@${ip} bash -s < ${remote_up} 
    ssh  -o StrictHostKeyChecking=no ${user}@${ip} python3 -s < ${remote_up} - 'test'
done

StrictHostKeyChecking=no参数解释

  • 此处使用 StrictHostKeyChecking=no是为远程执行任务时,避免交互产生的异常报错

用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known\_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。默认情况下,StrictHostKeyChecking=ask。简单所下它的三种配置值:
1.StrictHostKeyChecking=no 最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
2.StrictHostKeyChecking=ask默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。
3.StrictHostKeyChecking=yes最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。

远程执行本地bash脚本直接在脚本名后跟定参数即可

ssh  -o StrictHostKeyChecking=no ${user}@${ip} bash -s < ${remote_up} 1 2 3 4 5

远程执行本地python脚本传参注意事项

# 本地脚本之后跟定  '-' 后传入参数。否则python程序无法识别参数
# 可以使用 ssh. Python 接受连字符(-)作为参数来执行标准输入
ssh user@machine python3 < script.py - arg1 arg2
ssh  -o StrictHostKeyChecking=no ${user}@${ip} python3 -s < ${remote_up} - 'test'
python3 --help
-   : program read from stdin (default; interactive mode if a tty)
-   : 程序从 stdin 读取 (默认; 交互式模式, 如果 tty)

你可能感兴趣的:(bash and python远程执行本地脚本方法)