赞
踩
在这篇文章中,主要谈及如何利用ssh-keygen生成密匙对,并且在windows本地机利用密匙远程连接linux主机,而代码将用python来实现。
SSH密钥可以认为是和另一台电脑通信时的唯一的识别证,利用SSH密钥对可以让我们方便的登录到 SSH 服务器,这样不需要输入密码,也更加安全。而这里我们利用ssh-keygen来生成ssh 密钥。
服务端在后台运行并响应来自客户端的连接请求,默认在22端口进行监听,服务端一般是sshd进程,提供了对远程连接的处理,一般包括密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等应用程序。
利用ssh-keygen生成ssh 密钥:
命令:ssh-keygen -t [rsa|dsa]
加密方式rsa、dsa均可选,默认是dsa。运行命令将会生成私钥文件和公钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub。
如果在root用户下生成密匙对,那么文件在/root/.ssh下。
生成密匙的时候,可以通过-f指定生成文件的文件名,例如:
ssh-keygen-t rsa -f ~/.ssh/id_rsa
在ssh_key.py添加如下代码:
#-*- coding:utf-8 -*- import paramiko #使用密钥连接远程主机 def ssh_command(ip,port,username,command): # 创建SSH对象 client = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #利用密匙 key="G:/root/ssh/id_rsa" client.load_system_host_keys() #连接服务器 client.connect(ip, port, username, key_filename=key) # 直接使用SSHClient对象的exec_command()在服务端执行命令 stdin,stdout,stderr = client.exec_command(command) receive = stdout.read() # 打印输出 print receive.decode('utf-8') # 关闭连接 client.close() ssh_command('192.168.1.175',22,'root','ls')
在远程主机linux上的终端执行以下命令,通过-f指定了生成文件的文件名,通过-P指定了无密码:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P""
在/root/.ssh下可以看到,已经生成了私匙和公钥。
公钥一般命名为authorized_keys,这是因为sshd的配置文件默认名字是这个,为了避免出现奇怪的问题,最好这样命名。所以我们进入/root/.ssh/目录下,把id_rsa.pub拷贝到authorized_keys文件中,在终端执行命令如下:
cd /root/.ssh/
cat id_rsa.pub >> authorized_keys
设置一下文件权限:
chmod 600 authorized_keys
chmod 700 ~/.ssh
我们在Linux上已经配置好了公钥,现在是时候在本地主机win10上配置私匙了。
选择一个磁盘,把刚才制作的私匙文件id_rsa放在“G:\root\ssh”目录下,注意一定要把磁盘的名字改为英文,中文会出问题。
打开/etc/ssh/sshd_config,我们需要配置它。在sshd_config文件中,默认将密钥认证这种登录方式给注释了,所以我们需要去掉前面的注释符号#。
运行python2 ssh_key.py,结果如下,我们成功的在win10上利用私匙远程连接了linux。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。