1. 若是程序是在 Linux远程执行 , 那么遇到某些下令是不需要 再输入密码的
但若是 python 是在内陆 , 用 paramiko包 远程ssh登录执行下令 , 就会遇到需要输入密码
2.解决办法 , 在windows上面 ssh-keygen -t rsa -C “abby@192.168.1.100” , 公钥的作用域是远程 IP用户名 为’abby’
建立window 自己的公钥 , 实在相当于自己的指纹.
把这个指纹 , 复制到远程 Linux的 公钥存放点
(在window的公钥文件夹下执行复制下令 , 注重远程Linux内里根目录 ~ 代表的是用户 , /dir 代表的是 root的根目录
scp ./id_rsa.pub abby@192.168.1.11:~/.ssh/windows_ras.pub 我这里是复制到用户.ssh内里
这个下令就是查看你复制到Linux的RSA 公钥而且写入到 Linux已确认免密登录公钥的文件中 , 他自己会建立 , 这样就可以window免密登录了
使用python的 ssh 功效就不用输入密码 ,我指的是启动某些下令需要
cat windows_ras.pub >> authorized_keys
注重: scp 复制到Linux的 / 和~/ 不是统一位置哦 , / 是root的免密 . ~/是 user的免密(说了两遍)
Final: 贴上我 用python 上的 paramiko 包 远程 启动 hadoop实例 .以前是能上岸进去,然则执行下令会报要输入密码 ,
另外,执行下令需要输入完整的路径名
#-*- coding: utf-8 -*-#批量操作linux服务器(执行下令,上传,下载)#!/usr/bin/python
importparamikoimportthreadingdefssh2(ip, username, passwd, cmd):try:
paramiko.util.log_to_file('paramiko________.log')
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22, username, passwd, timeout=5)
stdin, stdout, stderr=ssh.exec_command(cmd)
out=stdout.readlines()#outerr = stderr.readlines()
#屏幕输出
print('执行完毕')for o inout:print(o),print('%s\tOK\n' %(ip))
ssh.close()except:print('%s\tError\n' %(ip))if __name__ == '__main__':#cmd = ['ls -lh /export/servers/mysql/log/mysql.log']#你要执行的下令列表
#从文件读取下令
cmd= "/home/abby/module/hadoop-2.6.0-cdh5.15.0/sbin/start-dfs.sh;"
print("执行下令:", cmd)
username= "abby" #用户名 你是免密给哪个用户的 ,哪个用户才有权力不用 密码接待外宾
passwd = "1" #单台服务器时启用----------------------
ip = '192.168.1.11' #单台服务器时启用----------------------
a= threading.Thread(target=ssh2, args=(ip, username, passwd, cmd))
a.start()
PS: 我们把window的 公钥比喻成一个客户 , 秘钥上传比作 行贿 , 你传给谁的 , 那么谁才能为你 开门 ,scp 的位置 , 作用的用户 就是你行贿的工具
你不能用行贿给 abby , 开门却去找 root , 那样照样需要密码的 , 就算你把大门打开 , 焦点通道你照样进不去 ,就像这里我行贿给 abby ,我用root 去登录 ,
能登进去 , 但执行需要认证的下令一定失败.
以是我用 abby 登录上照样可以的 ,就算 root 的权限比abby 高也不行 . 我执行了 关闭 hadoop的下令 而且返回了 .
通过这个 . . . 这也能执行一些剧本的 .横竖不需要输密码 .
原文链接:https://www.cnblogs.com/alpha-cat/p/12861783.html
本站声明:网站内容来源于网络,若有侵权,请联系我们,我们将及时处理。