Linux之SSH協議知識點總結
最近在寫自動化測試用例的時候經常會用python 語言去實現檔案的上傳下載功能,這裡主要用到的就是SSH 協議。為了更好的理解SSH 協議,我就翻看了手頭的書,回顧SSH 的相關知識點,今天就把它總結下,希望對用到SSH 協議的小夥伴能夠有所幫助。
一、何為 SSH 協議?
SSH 是一種不同於HTTP 協議的網路協議,用於伺服器之間的加密登入。如果一個使用者想從本地使用SSH 協議登入另一臺遠端伺服器,需要對方伺服器的使用者名稱,密碼,地址。這是目前Linux 系統進行遠端管理的首選方式。最開始的時候,網際網路都是明文通訊,一旦被截獲,資訊就被暴露無遺,因此很不安全,很容易被黑攻擊而導致網站癱瘓。自從SSH 協議問世之後,因其安全性很快成為Linux 系統的標配。
二、如何配置 sshd 服務
我們說“ 系統中一切皆檔案” ,那麼作為Linux 系統遠端管理的首選,我們要對哪個檔案做怎樣的配置呢?sshd 服務的配置在系統的/etc/ssh/sshd_config 檔案中,我們可以開啟此檔案看看裡邊都有啥配置。這個配置檔案我用的最多的就是開啟虛機的root 許可權,可以用vim 文字編輯器開啟此配置檔案,然後把第48 行#PermitRootLogin yes 引數前的# 去掉,然後儲存檔案並退出,僅僅是這樣檔案是沒生效的,一定要記得重啟sshd 服務,也就是在系統中執行service sshd restart 命令,這樣才算真正把該虛機的root 許可權開啟。這裡附上用python 語言實現該功能的程式碼:
def create_ssh_connect_object(ip_remote, port_remote, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
print('Connecting to {0}:{1}'.format(ip_remote, port_remote))
ssh.connect(ip_remote, port_remote, username=username, password=password, timeout=TIMEOUT) # timeout protection
return ssh
except:
print('Failed to connect {0}, now will retry'.format(ip_remote))
ssh.connect(ip_remote, port_remote, username=username, password=password, timeout=TIMEOUT) # timeout re-try
print('Retry failed, please check the IP, port, account
and password')
def permit_root_login():
"""
Enable ssh connection for root
"""
ssh = create_ssh_connect_object(VXM_IP, 22, VXM_USER, VXM_PASSWORD)
print('Connecting to new VxRail Manager with mystic')
channelSSHOb = ssh.invoke_shell()
remove_offending_key_cmd = 'ssh-keygen -R {0} -f /root/.ssh/known_hosts'.format(NEW_VXM_IP)
channel_exe_cmd(channelSSHOb, remove_offending_key_cmd)
connect_to_new_vxm_cmd = 'ssh -o "StrictHostKeyChecking no" mystic@{0}'.format(NEW_VXM_IP)
if channel_exe_cmd(channelSSHOb, connect_to_new_vxm_cmd).endswith(u"Password: "):
print('Entering the password for mystic')
mystic_pwd = 'mystic'
channel_exe_cmd(channelSSHOb, mystic_pwd)
change_to_root_cmd = 'su'
if channel_exe_cmd(channelSSHOb, change_to_root_cmd).endswith(u"Password: "):
print('Switch user to root')
root_pwd = 'Passw0rd!'
channel_exe_cmd(channelSSHOb, root_pwd)
print('Permit root login for SSH')
permit_root_login_cmd = "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config"
channel_exe_cmd(channelSSHOb, permit_root_login_cmd)
restart_sshd_cmd = 'service sshd restart'
channel_exe_cmd(channelSSHOb, restart_sshd_cmd)
ssh.close()
三、安全金鑰驗證
SSH 作為一種安全的遠端登入協議,它是怎麼實現安全驗證的呢?
SSH 提供了兩種安全的驗證方法:
1. 基於口令的驗證,也就是用賬戶和密碼來進行登入驗證。如:
mystic@mystic-vm:~$ ssh root@20.10.115.201
Password:
這種方式需要使用者提供使用者名稱和密碼,很像我們看的抗日戰爭片中,共產黨想要夜襲日本的軍備司令部,想要進入大門,經常會要對暗號,這個暗號就像密碼,對,則放行,不對,則攔截。
2. 基於金鑰的驗證,這種方法類似於需要用鑰匙開門,一把鑰匙開一個門,鑰匙不對,則門就打不開,不管你是誰。我只認鑰匙。作為一個碼農,這個是在我們使用Github 的時候使用SSH 協議克隆程式碼經常會用到的,我們想要在某臺虛機上克隆github 的程式碼,就先要在該虛機上生成金鑰對,然後把金鑰對中的公鑰上傳至github ,讓該虛機和github 相互識別,然後才能成功的把程式碼克隆到該虛機。
四、遠端傳輸命令
在我們的日常工作中,經常會涉及到檔案在不同伺服器之間的上傳下載,最方便快速的方式是使用scp 命令,scp 也是基於SSH 協議的,scp 的語法格式:
把本地檔案上傳到遠端伺服器:Scp [ 引數] 本地檔案 遠端賬戶@ 遠端IP 地址:/ 遠端目錄
把遠端伺服器檔案下載到本地:Scp [ 引數] 遠端賬戶@ 遠端IP 地址:/ 遠端目錄 本地目錄
使用scp 命令進行檔案的上傳下載時,一定要寫清楚檔案的具體位置,如果是壓縮檔案,記得加引數-r 進行遞迴操作。只要檔案地址正確,遠端伺服器的賬戶密碼正確,就可以開始檔案的傳輸工作,這種方式比我們用檔案傳輸工具傳輸檔案更高效,省去了登入工具的麻煩,同時傳輸效率也更快。
以上就是我日常工作中經常用到SSH 協議的使用場景,總結的可能不是很全面,畢竟認知有限,有疏漏的地方歡迎大家給予指正,如果說剛好你的工作中也需要用到這些,希望對你有所幫助。如果你還想對SSH 協議有更深層次的理解,但苦於找不到好資料,這裡推薦給你 這本書,這本書的第9 章很全面的介紹了SSH 協議,從配置到使用都有很詳細的介紹。不管你處於什麼水平,都很適合你去查閱。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2846626/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP協議知識點總結HTTP協議
- HTTP協議知識總結HTTP協議
- HTTP 協議知識點總結(二)HTTPSHTTP協議
- linux知識知識點總結Linux
- 關於 SSH 框架面試知識點的總結框架面試
- Linux——檔案傳輸協議知識點梳理Linux協議
- 知識點總結
- uniapp專案實踐總結(二十)URLScheme 協議知識總結APPScheme協議
- 非常全面的Linux知識點總結Linux
- TCP/IP協議重要知識點彙總(持續更新中)TCP協議
- HDFS知識點總結
- MongoDB知識點總結MongoDB
- Java 知識點總結Java
- django知識點總結Django
- jQuery 知識點總結jQuery
- MySQL知識點總結MySql
- HBase知識點總結
- Kafka知識點總結Kafka
- JavaScript知識點總結JavaScript
- iOS 知識點總結iOS
- Java知識點總結Java
- pga知識點總結
- 【建議收藏】Go語言關鍵知識點總結Go
- 搞定PHP面試 - HTTP協議知識點整理PHP面試HTTP協議
- CSS知識點面試總結CSS面試
- HBase知識點集中總結
- 事務知識點總結
- 知識點漏缺總結
- 前端知識點總結——Vue前端Vue
- java面試知識點總結Java面試
- 前端知識點總結——HTML前端HTML
- 前端知識點總結——DOM前端
- Java 面試知識點總結Java面試
- RabbitMQ 常用知識點總結MQ
- Tomcat 知識點總結Tomcat
- MySQL 索引知識點總結MySql索引
- HTML-知識點總結HTML
- 升級_知識點總結