专栏首页python3python实现ssh客户端

python实现ssh客户端

以下程序均来自《Python.UNIX和Linux系统管理指南》

ssh有两种登陆方式,一种是使用用户名、密码方式,另一种是使用加密,不再使用密码

使用用户名、密码方式,前提是曾经ssh登陆过远程机器,在用户目录的.ssh目录下的known_hosts有记录

ssh.py
#!/usr/bin/env python
import paramiko
hostname = '192.168.137.3'
port = 22
username = "root"
password = "123456"
if __name__ == "__main__":
        paramiko.util.log_to_file('paramiko.log')
        s = paramiko.SSHClient()
        s.load_system_host_keys()
        s.connect(hostname, port, username, password)
        stdin, stdout, stderr = s.exec_command('ifconfig')
        print stdout.read()
        s.close()

运行结果:

[root@centos python]# python ssh.py

eth0      Link encap:Ethernet  HWaddr 00:0C:29:1B:C2:CD  

         inet addr:192.168.137.3  Bcast:192.168.137.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:976 errors:0 dropped:0 overruns:0 frame:0

         TX packets:958 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:104727 (102.2 KiB)  TX bytes:125765 (122.8 KiB)

         Interrupt:67 Base address:0x2000

lo        Link encap:Local Loopback  

         inet addr:127.0.0.1  Mask:255.0.0.0

         UP LOOPBACK RUNNING  MTU:16436  Metric:1

         RX packets:2340 errors:0 dropped:0 overruns:0 frame:0

         TX packets:2340 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:3564169 (3.3 MiB)  TX bytes:3564169 (3.3 MiB)

sftp

sftp.py
#!/usr/bin/env python
import paramiko
import os
hostname = '192.168.137.3'
port = 22
username = 'root'
password = '123456'
dir_path = '/usr/local/get'
if __name__ == '__main__':
        t = paramiko.Transport((hostname, port))
        t.connect(username=username, password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = sftp.listdir(dir_path)
        for f in files:
                print 'Retrieving', f
                sftp.get(os.path.join(dir_path, f), f)
        t.close()

运行结果:

[root@centos python]# python sftp.py

Retrieving c

Retrieving a

Retrieving b

Retrieving d

使用RSA加密方式,前提是已经设置好加密登陆方式

ssh加密登陆方法:

[root@centos .ssh]# ssh-keygen -t rsa  #其他的直接回车就行

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

74:64:97:4d:af:52:c0:8c:98:ae:83:7e:e7:25:3a:6e root@centos

ssh

[root@centos .ssh]# cp id_rsa.pub authorized_keys

[root@centos .ssh]# scp authorized_keys root@192.168.137.3:/root/.ssh

#拷贝到ssh的那天机器上

ssh

ssh_rsa.py
#!/usr/bin/env python
import paramiko
hostname = '192.168.137.3'
port = 22
username = "root"
password = "123456"
pkey_file = "/root/.ssh/id_rsa"
if __name__ == "__main__":
        key = paramiko.RSAKey.from_private_key_file(pkey_file)
        s = paramiko.SSHClient()
        s.load_system_host_keys()
        s.connect(hostname, port, pkey=key)
        stdin, stdout, stderr = s.exec_command('ifconfig')
        print stdout.read()
        s.close()

运行结果同上ssh

sftp

sftp_rsa.py
#!/usr/bin/env python
import paramiko
import os
hostname = '192.168.137.3'
port = 22
username = 'root'
password = '123456'
dir_path = '/usr/local/get'
pkey_file = '/root/.ssh/id_rsa'
if __name__ == '__main__':
        key = paramiko.RSAKey.from_private_key_file(pkey_file)
        t = paramiko.Transport((hostname, port))
        t.connect(username=username, pkey=key)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = sftp.listdir(dir_path)
        for f in files:
                print 'Retrieving', f
                sftp.get(os.path.join(dir_path, f), f)
        t.close()

运行结果同上sftp

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenStack HA集群3-Pace

    py3study
  • 服务器免密登录

    由于有多台服务器,每次登录还需要 去找对应的服务器地址,然后输入密码,为了避免麻烦,就使用了免密登录。

    py3study
  • python中创建和遍历二叉树

    py3study
  • ssh无密码登陆和只允许指定账号登陆

    需求:A主机可以无密码登陆B主机,并且只能在A主机使用root登陆B主机 步骤: 1、生成公钥ssh-keygen -t rsa -P ”;-P表示密码,-P ...

    苦咖啡
  • linux上配置ssh实现免密登录

    当有多台服务器彼此进行通信时,可以通过使用ssh来免去输入密码的步骤。这篇文章将以两台服务器作为范例,演示如何通过ssh进行登录。

    张子阳
  • 免密登录

    抄来的。。找不到原文链接了。。 A为本地主机(即用于控制其他主机的机器) ; B为远程主机(即被控制的机器Server), 假如ip为172.24.253....

    _淡定_
  • SSH随笔

    简单说,SSH是一种网络协议,用于计算机之间的加密登录。SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。这里说的实现是OpenSSH。

    浩Coding
  • linux配置ssh互信实现免密登陆

    公钥认证的基本思想 对信息的加密和解密采用不同的key,这对key分别称作private key(私钥)和public key(公钥),其中,public ke...

    行 者
  • linux基础命令介绍六:网络

    本文将讲述网络相关命令,作者假定读者具备TCP/IP协议栈的基础知识。对于相关命令及其输出只介绍它的基本的使用方法和大概的描述,具体协议将不作详细解释。

    用户5030870
  • docker通过模板创建镜像以及容器、仓库和数据管理

    笔记内容:docker通过模板创建镜像以及容器、仓库和数据管理 笔记日期:2018-02-05

    端碗吹水

扫码关注云+社区

领取腾讯云代金券