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連接伺服器是一個非常有用的技能,可以使工作更加高效便捷。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236186.html