- Mastering Python Networking
- Eric Chou
- 456字
- 2021-07-02 21:42:37
Paramiko for Servers
Paramiko can be used to manage servers through SSHv2 as well. Let's look at an example of how we can use Paramiko to manage servers. We will use key-based authentication for the SSHv2 session.
We will generate a public-private key pair for our Paramiko host:
ssh-keygen -t rsa
This command, by default, will generate a public key named id_rsa.pub, as the public key under the user directory called ~/.ssh along with a private key named id_rsa. Treat the private key as your password that you do not want to share, but treat the public key as a business card that identifies who you are. Together, the message will be encrypted by your private key locally and decrypted by remote host using the public key. Therefore, we should copy the public key to the remote host. In production, we can do this via out-of-band using an USB drive; in our lab, we can simply just copy the public key file to the remote host's ~/.ssh/authorized_keys file. Open up a Terminal window for the remote server, so you can paste in the public key.
Copy the content of ~/.ssh/id_rsa on your management host with Pramiko:
<Management Host with Pramiko>$ cat ~/.ssh/id_rsa.pub
ssh-rsa <your public key> echou@pythonicNeteng
Then, paste it to the remote host under the user directory; in this case I am using echou for both the sides:
<Remote Host>$ vim ~/.ssh/authorized_keys
ssh-rsa <your public key> echou@pythonicNeteng
You are now ready to use Paramiko to manage the remote host:
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import paramiko
>>> key = paramiko.RSAKey.from_private_key_file('/home/echou/.ssh/id_rsa')
>>> client = paramiko.SSHClient()
>>> client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> client.connect('192.168.199.182', username='echou', pkey=key)
>>> stdin, stdout, stderr = client.exec_command('ls -l')
>>> stdout.read()
b'total 44ndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Desktopndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Documentsndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Downloadsn-rw-r--r-- 1 echou echou 8980 Jan 7 10:03 examples.desktopndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Musicndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Picturesndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Publicndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Templatesndrwxr-xr-x 2 echou echou 4096 Jan 7 10:14 Videosn'
>>> stdin, stdout, stderr = client.exec_command('pwd')
>>> stdout.read()
b'/home/echoun'
>>> client.close()
>>>
Notice that in the server example, we do not need to create an interactive session to execute multiple commands. You can now turn off password-based authentication in your remote host's SSHv2 configuration for a more secured key-based authentication with automation enabled.
- Cocos2d Cross-Platform Game Development Cookbook(Second Edition)
- 數據庫原理及應用(Access版)第3版
- C# Programming Cookbook
- Vue.js 2 and Bootstrap 4 Web Development
- Visual Basic程序設計(第3版):學習指導與練習
- Mastering matplotlib
- Scala編程實戰(原書第2版)
- Multithreading in C# 5.0 Cookbook
- Natural Language Processing with Java and LingPipe Cookbook
- 區塊鏈技術進階與實戰(第2版)
- 軟件測試綜合技術
- uni-app跨平臺開發與應用從入門到實踐
- 創意UI:Photoshop玩轉APP設計
- HTML+CSS+JavaScript網頁制作:從入門到精通(第4版)
- Instant Automapper