Python是当今最为流行的编程语言之一,其受欢迎的原因之一是由于其灵活性和强大的功能。Python拥有丰富的库和工具,使其成为处理多种任务的理想选择。当与其他技术一起使用时,它可以完成各种各样的任务,例如远程服务器管理和批量处理,因此学习如何远程访问服务器,并使用Python进行管理是非常有用的。本文将探讨使用Python PyCharm远程连接服务器的方法。
一、安装paramiko库
紧密建立SSH(Secure Shell协议)的Python的一个标准库是Paramiko。该库包含用于SSH客户端和服务器的模块,与其他Perl,Ruby,Java等语言都有对应的库。要在PyCharm中使用Paramiko,必须首先在计算机中安装该库。可以使用以下pip命令安装Paramiko库:
pip install paramiko
安装完成后,便可在PyCharm中使用Paramiko连接服务器。下面是一个连接到远程服务器的示例代码:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('server_ip', port=22, username='username', password='password')
stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read())
ssh.close()
在此代码中,我们使用Paramiko创建了一个SSH客户端。 连接到SSH服务时,应在set_missing_host_key_policy()中指定策略,该策略将接受所有新的主机密钥。然后,使用连接参数(主机名,端口,用户名和密码)连接到服务器。最后,我们执行命令'ls',并使用print语句打印结果。最后,关闭SSH连接。
二、使用SSH密钥进行连接
在上述示例中,我们使用了用户名和密码进行认证,但是,如果使用SSH密钥对而非密码进行身份验证,则更加安全。因此,本章将介绍如何使用SSH密钥对进行身份验证。要使用SSH密钥对,请执行以下操作:
1.生成密钥对:
使用ssh-keygen命令生成密钥对。命令如下:
ssh-keygen -t rsa -b 4096
可在运行ssh-keygen命令后按默认参数设置(一路按回车即可),即可生成私有密钥(默认名称为id_rsa)和公共密钥(默认名称为id_rsa.pub)。私有密钥在使用时需要保证安全,因此不要轻易将其传输到其他机器中。公共密钥可以分发给需要访问服务器的用户。
2.将公钥添加到服务器上的authorized_keys文件中:
将id_rsa.pub文件的内容添加到服务器上的authorized_keys文件中。将公共密钥添加到authorized_keys文件中后,即可使用私钥对将连接到远程服务器进行身份验证。
3.使用私钥进行连接:
使用私钥对连接到远程服务器。代码如下:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('server_ip', username='username', key_filename='/path/to/private_key')
stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read())
ssh.close()
在代码中我们仅需要将password参数改成key_filename,参数值为我们的私钥路径即可完成从密码方式到SSH密钥对方式的转变。
三、使用SSH代理进行连接
当我们需要连接到远程服务器时,如果目标服务器不可直接访问(如位于私有网络中,或者通过跳板主机进行访问),则必须使用代理。SSH代理(也称为跳板)可让用户连接到一个中间服务器,然后从中间服务器连接到远程服务器。本章将介绍如何使用SSH代理进行连接,以及如何在PyCharm中配置SSH代理。
1.使用SSH代理进行连接:
在使用SSH代理进行连接时,需要为paramiko设置一个堡垒机,然后再连接到我们要访问的目标主机。下面是一个示例代码,其中使用了一台堡垒机实现向目标服务器的连接:
import paramiko
# 定义堡垒机和目标机器的信息
bastion = {'hostname': '10.10.0.1', 'username': 'bastion', 'password': 'bastion-password', 'port': 22}
target = {'hostname': '192.168.0.101', 'username': 'target', 'password': 'target-password', 'port': 22}
# 连接到堡垒机
ssh_bastion = paramiko.SSHClient()
ssh_bastion.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_bastion.connect(bastion['hostname'], bastion['port'], bastion['username'], bastion['password'])
# 建立隧道连接至目标主机
transport = ssh_bastion.get_transport()
dest_addr = (target['hostname'], target['port'])
local_addr = ('localhost', 10022)
channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
# 连接到目标主机
ssh_target = paramiko.SSHClient()
ssh_target.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_target.connect('localhost', port=10022, username=target['username'], password=target['password'])
# 执行命令
stdin, stdout, stderr = ssh_target.exec_command('ls')
print(stdout.read())
# 关闭连接
ssh_target.close()
ssh_bastion.close()
在此代码中,我们首先定义了一个表示堡垒机和目标服务器的字典。然后,使用Paramiko的SSHClient连接到堡垒机。随后,我们创建了一个隧道通道来连接到目标服务器,并使用SSH代理连接到目标服务器。最后,我们执行命令'ls',打印输出结果,并关闭SSH连接。
2.在PyCharm中设置SSH代理:
配置PyCharm窗口左下角找到Setting--Search“SSH Proxy”,在弹出的对话框中根据实际情况输入跳板机的IP地址,端口号等信息即可。
四、总结
在本文中,我们探讨了使用Python PyCharm远程连接服务器的方法。使用Paramiko库进行SSH协议连接,可以实现多种连接方式,例如使用SSH密钥,使用SSH代理等。这些都是管理大量服务器时非常有用的技术。因此,学习如何使用Python和Paramiko连接服务器是一个非常有用的技能,可以使工作更加高效便捷。