本文所用系統為 Ubuntu 18.04
什么是SSH?
簡單說,SSH是一種網絡協議,用於計算機之間的加密登錄。全名為:安全外殼協議。為Secure Shell的縮寫。SSH為建立在應用層和傳輸層基礎上的安全協議。
如果一個用戶從本地計算機,使用SSH協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標准配置。
需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文針對的實現是OpenSSH,它是自由軟件,應用非常廣泛。
OpenSSH的安裝
檢查SSH是否安裝:
ssh localhost
通過APT的安裝命令非常方便 :
sudo apt install openssh-server
OpenSSH配置文件
如果安裝成功以后,有關的配置文件都在/etc/ssh/sshd_config:
sudo gedit /etc/ssh/sshd_config
OpenSSH常用配置文件有兩個/etc/ssh/ssh_config 和 /etc/ssh/sshd_config
ssh_config 為客戶端配置文件
sshd_config 為服務端配置文件
通過命令對其進行編輯,在配置文件中,那些被注釋掉的就是默認配置值。
解除注釋(#),修改默認值,(比如Port 改為12345)
配置完成以后,通過以下命令生效
service ssh restart 注: service ssh start // 開啟SSH服務 service ssh stop // 停止SSH服務 service ssh restart // 重啟SSH服務
可以通過以下命令查看SSH的運行結果
ps -e|grep ssh
SSH命令
常用命令
ssh [-l login_name] [-p port] [user@]hostname
遠程但不登入,直接執行命令
方法1:
ssh [遠程主機用戶名]@[遠程服務器主機名或IP地址] [命令]
方法2:
ssh -l [遠程主機用戶名] [遠程服務器主機名或IP地址] [命令]
遠程登錄到配置有OpenSSH的主機
由於本Ubuntu是設置在Windows虛擬機上,網絡通過橋接。那么相當於,在本局域網內有2個主機:Windows 、 Ubuntu
由於已經搭建了Ubuntu的SSH服務端,那么我們可以在Windows端登錄到Ubuntu查看效果。
Windows上用的工具比較多,常見的有:SecureCRT、Putty
如果指定的端口和IP沒有錯誤的話,會彈窗告知遠程服務器不可信,是否繼續。
點擊:“是”,輸入用戶名和密碼,即可看到以下界面:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * Canonical Livepatch is available for installation. - Reduce system reboots and improve kernel security. Activate at: https://ubuntu.com/livepatch 269 packages can be updated. 25 updates are security updates. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. schips@ubuntu:~$
斷開SSH登錄有兩種方法
Ctrl + D
輸入logout
免密登錄
配置免密登錄的操作在客戶端上面進行
假設我們有2台主機,當前登錄的機器為192.168.1.100。
要登錄的機器為192.168.1.101。
1.在當前的機子(100)上生成Keygen
ssh-keygen -t rsa
會有3次詢問,一路回車即可
2.上傳第一步公鑰到服務器(101)
ssh-copy-id -i ~/.ssh/id_rsa.pub 遠程用戶名@遠程IP 例如: ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.101
完成。
scp 跨級遠程拷貝
scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的。可能會稍微影響一下速度。兩台主機之間復制文件必需得同時有兩台主機的復制執行帳號和操作權限。
比較適合在免密登錄下拷貝
scp命令參數
-1 強制scp命令使用協議ssh1 -2 強制scp命令使用協議ssh2 -4 強制scp命令只使用IPv4尋址 -6 強制scp命令只使用IPv6尋址 -B 使用批處理模式(傳輸過程中不詢問傳輸口令或短語) -C 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能) -p 留原文件的修改時間,訪問時間和訪問權限。 -q 不顯示傳輸進度條。 -r 遞歸復制整個目錄。 -v 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。 -c cipher 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。 -F ssh_config 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。 -i identity_file 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。 -l limit 限定用戶所能使用的帶寬,以Kbit/s為單位。 -o ssh_option 如果習慣於使用ssh_config(5)中的參數傳遞方式, -P port 注意是大寫的P, port是指定數據傳輸用到的端口號 -S program 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
scp一般有六種使用方法
本地復制遠程文件:(把遠程的文件復制到本地)
scp
root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
遠程復制本地文件:(把本地的文件復制到遠程主機上)
scp /val/test.tar.gz
root@www.test.com:/val/test.tar.gz
本地復制遠程目錄:(把遠程的目錄復制到本地)
scp -r
root@www.test.com:/val/test/ /val/test/
遠程復制本地目錄:(把本地的目錄復制到遠程主機上)
scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
pika:/media/pika/files/machine_learning/datasets$scp -r SocialNetworks/ piting@192.168.0.172:/media/data/pipi/datasets
本地復制遠程文件到指定目錄:(把遠程的文件復制到本地)
scp
root@www.test.com:/val/test/test.tar.gz /val/test/
遠程復制本地文件到指定目錄:(把本地的文件復制到遠程主機上)
scp /val/test.tar.gz
root@www.test.com:/val/
ps: scp復制文件時只指定服務器地址不加路徑默認復制到哪里???
附錄:SSH服務器常用配置設置
使用的命令:
sudo vi /etc/ssh/sshd_config
對應的修改項目
配置名
|
意義
|
備注
|
Port
|
使用的端口
|
可以通過添加多行以支持多個端口
Port 123
Port 456
|
ListenAddress
|
監聽的IP地址
|
|
Protocol
|
支持的SSH協議版本
|
Protocol
2,1 // 同時支持1,2
Protocol
2 // 使用SSH版本2
|
PermitRootLogin
|
是否允許root(建議no)
|
|
PermitEmptyPasswords
|
允許空密碼登錄(建議no)
|
|
PasswordAuthentication
|
允許使用密碼配置(建議yes)
|
|
StrictModes
|
使用者的hot key改變以后否是仍然接受聯機(默認yes)
|
|
PubkeyAuthentication
|
是否允許Public Key
|
僅針對 version 2
|
LoginGraceTime
|
多久時間沒有連上的的斷線時間
|
單位 m分鍾 h小時,s秒(默認)
|
PrintLastLog
|
顯示上一次登錄的信息
|
Last login: Wed Mar 23 22:12:58 2016 from 192.168.1.100
|
關於Shell變量傳遞、防暴力破解等設置略。
變量傳遞指的是:將本地的環境變量(比如$1等)傳遞到ssh命令中進行執行(而不是使用遠程SSH的環境變量)
防暴力破解主要使用的是 fail2ban 對網絡環境進行設置