paramiko模块及ssh远程登陆
ssh实现远程登陆一般有两种方式,一种就是用户密码登陆,另一种是密钥登陆(当然默认是要服务端打开ssh服务)。
我这里使用这两种方法操作一下远程登陆,测试客户端是本机的root与jeff用户,远程连接我的阿里云服务器。
用户及密码登陆
root@debian:/tmp# ssh root@120.79.254.225
root@120.79.254.225's password:
Last login: Thu Mar 29 20:23:02 2018 from 180.152.104.234 Welcome to Alibaba Cloud Elastic Compute Service ! [root@izwz9bqngpatc008nw00e7z ~]# pwd
/root
[root@izwz9bqngpatc008nw00e7z ~]#
root为服务端用户,输入帐号密码后,即登陆阿里云服务器。
密钥登陆
首先我们要在客户端创建密钥对。
root@debian:/tmp# ssh-keygen -t rsa -f ~/.ssh/id_rsa
默认不指定-f则默认存放到当前用户家目录下的.ssh目录下。在~/.ssh目录中生成两个文件:id_rsa(私钥) id_rsa.pub(公钥)。
然后我们将公钥导入到我们服务端。
在服务器中,目标用户(用来远程登录的用户)的公钥数据库位于~/.ssh/目录下,默认文件名是authorized_keys。
将我们的公钥输入到authorized_keys文件里。保证authorized_keys文件的权限为600,否则会报错。
root@debian:/tmp# ssh root@120.79.254.225
Last failed login: Thu Mar 29 20:36:38 CST 2018 from 103.244.83.194 on ssh:notty
There were 5 failed login attempts since the last successful login.
Last login: Thu Mar 29 20:32:42 2018 from 180.152.104.234 Welcome to Alibaba Cloud Elastic Compute Service ! [root@izwz9bqngpatc008nw00e7z ~]#
下一次访问,客户端访问服务端则不需要再输入密码了。如上。
paramiko模块
一个基于python实现的ssh远程安全连接,用于ssh远程执行命令、文件传输等功能的ssh客户端模块。
注:在python中的paramiko模块依赖一个加密信息安全模块crypto(pip安装paramiko时就有)。
使用paramiko登陆,探测,执行命令都需要用到SSHClient()。
In [1]: import paramiko In [2]: jfsh = paramiko.SSHClient()
paramiko.Transport()用来做传输时使用,我们暂时不用。
In [3]: jfsh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
客户端第一次访问时,服务端会创建一个konw_host文件存下客户端key,上述方式实现自动将不是自己konw_host下保存的key自动加入到里面。通过这一步就可以进行ssh连接了。
In [4]: jfsh.connect('120.79.254.225', '22', 'root', '密码')
未报错则连接正常,密码错误或其他则会报错。
paramiko实现密钥连接的前提必须是在此之前已经配置好密钥连接了。
然后如上操作到连接步骤。
我们需要使用paramiko的方法加载出密钥(私钥)。
In [8]: key = paramiko.RSAKey.from_private_key_file('/home/jeff/.ssh/id_rsa')
除了RSA的加密,DSS加密要使用DSSKEY方法。
In [9]: jfsh.connect('120.79.254.225', '22', 'root', pkey=key)
未报错,则表示登陆成功了。
远程登陆成功后使用exec_command进行执行命令:
In [10]: jfsh.exec_command('ls /tmp')
Out[10]:
(<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xe8edd668 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,
<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xe8edd668 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>,
<paramiko.ChannelFile from <paramiko.Channel 0 (open) window=2097152 -> <paramiko.Transport at 0xe8edd668 (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>)
In [11]: stdin,stdout,stderr = jfsh.exec_command('ls /tmp')
In [14]: stdout.read()
Out[14]: b'Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>\nfunctions\ngrub2.cfg\nPython-3.6.4\nsystemd-private-92f635f8f8cc42deb37a874145ea6c0e-ntpd.service-nfoTQ6\ntest.sh\n'
paramiko模块及ssh远程登陆的更多相关文章
- linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法
linux系统新建的用户用ssh远程登陆显示-bash-4.1$,不显示用户名路径 网络上好多解决办法,大多是新建.bash_profile文件然后输入XXXXX....然而并没有什么用没有用.... ...
- CentOS6无法本地登陆,ssh远程登陆没问题
CentOS6无法本地登陆,ssh远程登陆没问题---使用CentOS自带的rsyslog分析调试 Apr 21 14:15:27 raccontroller init: tty (/dev/tty1 ...
- 树莓派3b+ Ubuntu 16.04 MATA系统 ssh远程登陆后修改主机名、用户密码和用户名
写在前面: 刚刚开始写博客,记录下自己的学习过程,备忘. 最近在使用树莓派做智能小车的开发,使用的是树莓派3b+,安装的是Ubuntu 16.04 MATA 系统,安装系统后需要修改主机名,登陆密码以 ...
- SSH 远程登陆
2019-03-10 20:41:39 一.什么是SSH 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登 ...
- Linux服务器开启ssh服务,实现ssh远程登陆!
最近在学linux,使用ssh远程登陆linux,记录下来! 首先进入/etc目录下,/etc目录存放的是一些配置文件,比如passwd等配置文件,要想使用ssh远程登陆,需要配置/etc/ssh/s ...
- linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法,ssh-bash-4.1
linux系统新建的用户用ssh远程登陆显示-bash-4.1$,不显示用户名路径 网络上好多解决办法,大多是新建.bash_profile文件然后输入XXXXX....然而并没有什么用没有用.... ...
- 很好用的取代 PuTTY 的SSH远程登陆软件 Termius
一直以来, 我都是用 PuTTY 一个窗口一个窗口来监视我所有的远程服务器. putty-connections-on-a-screen 总感觉非常的不方便, 特别是当远程链接断开需要再重新打开PUT ...
- ubuntu19配置静态IP并开启SSH远程登陆
前言 从ubuntu从17.10开始,已经不再在/etc/network/interfaces里配置IP,即使配置了也不会生效,而是改成netplan方式 ,配置写在/etc/netplan/文件夹 ...
- 解决 Ubuntu 无法使用 root 用户进行 ssh 远程登陆
解决 Ubuntu 无法使用 root 用户进行 ssh 远程登陆 操作系统 Ubuntu 20.04.2 LTS 一.修改sshd配置文件 //打开 /etc/ssh/sshd_config 配置文 ...
随机推荐
- win7旗舰版64位java的jdk环境变量的配置(2012-12-26-bd 写的日志迁移
首先到oracle的官方网站http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html下个JDK比如下图: 必须是win ...
- JAVA使用JDBC连接,修改MySQL数据库(比较乱)
原文地址1(连接MySQL图文) : http://www.cnblogs.com/GarfieldEr007/p/5746137.html 原文地址2 (修改MySQL图文): http://www ...
- Java堆内存又溢出了!教你一招必杀技
JAVA堆内存管理是影响性能主要因素之一.堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的. 先看下JAVA堆内存是如何划分的,如图: JVM内存划分为 ...
- 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- POJ 3414 BFS 输出过程
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17456 Accepted: 7407 Special J ...
- 问题 1936: [蓝桥杯][算法提高VIP]最大乘积
问题 1936: [蓝桥杯][算法提高VIP]最大乘积 时间限制: 1Sec 内存限制: 128MB 提交: 77 解决: 16 题目描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? ...
- 3224: Tyvj 1728 普通平衡树(finger tree)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 19122 Solved: 8359[Submit][St ...
- Redis实现之RDB持久化(二)
RDB文件结构 在Redis实现之RDB持久化(一)这一章中,我们介绍了Redis服务器保存和载入RDB文件的方法,在这一节,我们将对RDB文件本身进行介绍,并详细说明文件各个部分的结构和意义.图1- ...
- mysql查询当天的数据
mysql查询当天的数据 贴代码: #两个时间都使用to_days()函数 select * from reple where to_days(create_time) = to_days(NOW() ...
- laravel5.2总结--任务调度
你可以通过 command() 来调用 artisan 命令, call 来调用方法或函数, 或者 terminal() 来执行单行命令脚本: 1.在app/Console/Commands文件夹 ...