從接觸Linux第一天便認識OpenSSH,距今有10年以上,現在幾乎每天都要使用。對我來說,OpenSSH不僅是一個遠程登錄的工具,還是文件傳輸,代理,端口轉發的好幫手。本章將介紹我用OpenSSH做過的一些各種操作。
幾乎每臺Linux服務器都會安裝OpenSSH,桌面Linux可能不會默認安裝,只需執行:
# Debian/Ubuntu
apt install openss-server
# RedHat/CentOS/Fedora
dnf install openssh-server
或
yum install openssh-server
執行以上命令默認會安裝ssh的server和client,如果未安裝client,可以執行:
# Debian/Ubuntu
apt install openssh-client
# RedHat/CentOS/Fedora
dnf install openssh-client
或
yum install openssh-client
Windows下不建議安裝OpenSSH服務端,即使能連上,Linux下命令無法使用,文件路徑分隔符不同。還會有各種水土不服的問題。
Windows下一般只用OpenSSH客戶端,連接到服務器執行一些操作。從Windows 10開始系統自帶OpenSSH客戶端,在“設置”->“應用和功能”->“可選功能”中添加
安裝完后就可以在cmd或powershell中執行ssh命令了。
Windows下還有很多好用的圖形化SSH客戶端功能,如:putty,xshell(推薦)。在Windows 10以下的系統中可以使用。
在使用過程中,Windows和Linux還不太一樣,比如在做代理時,Windows下不支持把把參寫在一個“-”中,必須分開。如非特別說明,本章所有操作都基于Linux環境實踐。
OpenSSH服務端配置文件在 /etc/ssh 目錄下。
sshd_config
OpenSSH Service 配置文件
ssh_config
OpenSSH Client 配置文件
一般使用默認配置即可,我只遇到過兩種情況修改配置。
打開 sshd_config 配置文件,PermitRootLogin 修改為 yes
打開 ssd_config 配置文件,UseDNS 修改為 no,禁用反向解析
打開 ssd_config 配置文件,GSSAPIAuthentication、GSSAPICleanupCredentials、UsePAM 修改為no,然后使用安全密鑰登錄。
打開 ssd_config 配置文件,Port 修改為其他端口號。
sshd啟動命令要使用絕對路徑執行:
/sbin/sshd -p 22
或者用服務啟動(推薦)
systemctl start sshd
登錄命令:ssh 用戶名@IP地址 ,如:
ssh engr-z@192.168.8.200
默認使用22端口,可以使用”-p”參數指定端口號,示例:
ssh engr-z@192.168.8.200 -p 2222
如果系統是第一次登錄,會彈出驗證信息
輸入yes,然后按提示輸入正確密碼即可登錄成功。
OpenSSH每次登錄都會彈出輸入密碼的交互界面,在ssh命令中是沒有直接輸入密碼的參數,不過我們可以使用sshpass把密碼放到命令中登錄。
安裝sshpass
# Debian/Ubuntu
apt install sshpass
# RedHat/CentOS/Fedora
dnf install sshpass
或
yum install sshpass
使用方法:
sshpass
示例:
sshpass -p "密碼" ssh engr-z@192.168.8.200
即 sshpass -p 密碼,后面和ssh登錄寫法一樣。需要注意的是,第一次認證后才能使用sshpass,否則不會彈出認證對話,也不會登錄成功。
經過測試,sshpass也支持scp。sshpass多用在自動化腳本中。
我們還可以用密鑰登錄。步驟如下(在客戶機上執行):
默認生成在用戶目錄 .ssh 文件夾下。
ssh-copy-id -i ./.ssh/id_rsa.pub engr-z@192.168.8.200
ssh-copy-id 將key寫到遠程機器的 ~/ .ssh/authorized_key 文件中
ssh -i ./ssh/id_rsa engr-z@192.168.8.200
刪除密鑰需要服務器端,打開 ~/ .ssh/authorized_key ,刪除對應密鑰即可。
OpenSSH中scp命令用于文件傳輸,語法:
scp <選項> <文件或目錄> 用戶名@目標主機:/<文件夾>
將文件或目錄從本地系統復制到特定文件夾下的目標主機
scp <選項> 用戶名@目標主機:/文件 <本地文件夾>
將目標主機中的文件復制到本地系統中
scp 命令中使用最廣泛的一些選項,
-C 啟用壓縮
-i 指定識別文件或私鑰
-l 復制時限制帶寬
-P 指定目標主機的 ssh 端口號
-p 復制時保留文件的權限、模式和訪問時間
-q 禁止 SSH 警告消息
-r 遞歸復制文件和目錄
-v 詳細輸出
示例:
# 將本地目錄上傳到服務器engr-z用戶目錄uploader文件夾下
scp -r 本地目錄 engr-z@192.168.8.200:~/uploader
# 將服務器engr-z用戶目錄下的index.html文件下載到本地
scp engr-z@192.168.8.200:~/index.html ./
scp傳送文件要用”-r”參數,”-i”參數可以指定密鑰免登錄。
scp也可以和sshpass一起使用,不用手動輸入密碼。
OpenSSH中還有一個sftp命令,和ftp命令類似,因為用得少就不寫了。
我們還可以使用sshfs命令把遠程目錄掛載到本地。
安裝sshfs
# Debian/Ubuntu
apt install sshfs
# RedHat/CentOS/Fedora
dnf install sshfs
或
yum install sshfs
示例:
sshfs -o allow_other,defer_permissions engr-z@192.168.8.200:/ /mnt/engr-z
掛載后訪問遠程目錄和訪問本地方式一樣,很方便。但是不建議用這種方式做網絡存儲。網絡存儲用samba或nfs掛載更穩定,性能更好。
很多開發工具,如MySQL客戶端,支持用ssh建立隧道連接服務器數據庫。我們也可以用OpenSSH創建一個socks5代理。
# Linux下多個參數可以寫一起,如:-NfCD
ssh -i 密鑰 -N -f -C -D 0.0.0.0:1080 用戶名@主機ip
參數說明:
-q 靜默運行
-N 是不執行遠端命令
-f 后臺運行
-C 壓縮
-i ssh驗證密鑰
配合sshpass,我們可以在開機時啟動,自動建立代理。
在需要代理的軟件中配置socks5 ,代理IP:0.0.0.0,端口:1080
ssh在一段時間無數據交互會被強制斷開,這樣代理就被關閉了。使用autossh可以幫助我們重聯。
安裝autossh:
# Debian/Ubuntu
apt install autossh
# RedHat/CentOS/Fedora
dnf install autossh
或
yum install autossh
用法:
autossh -M 7281 -i 密鑰 -N -f -C -D 0.0.0.0:1080 用戶名@主機ip
需要注意的是,第一次認證后才能使用autossh,否則不會彈出認證對話,也不會連接成功。
參數說明:
-M 是指autossh監聽端口
autossh還可以和sshpass一起使用,可以無需手動輸入密碼且自動重連。
在Windows中,使用xshell創建代理:
打開“隧道窗格”可以看到代理狀態:
其他客戶端設置類似。
現在使用frp做端口映射的方案很火,其實OpenSSH也可以做端口映射,雖然功能沒frp強大,勝在方便,無需安裝其他軟件一條命令執行即可。
把192.168.8.200的localhost的8000u端口映射到本地9000端口
ssh -L *:9000:localhost:8000 -N -f engr-z@192.168.8.200
訪問localhost:9000和192.168.8.200:8000效果是一樣的。
本地端口5000轉發到遠程端口6000
ssh -R *:6000:localhost:5000 -N -f engr-z@192.168.8.200
其他參數:
-f 后臺啟用
-N 不打開遠程shell,處于等待狀態
-g 啟用網關功能
ssh默認轉發的端口只能是127.0.0.1,需要在 sshd_config 配置文件中找到 GatewayPorts ,設為 yes 或 clientspecified
除非注明,否則均為"攻城獅·正"原創文章,請注明出處。
本文鏈接:https://engr-z.com/326.html
近日,微軟宣布Windows Server 2019和Windows 10 1809版本將正式支持OpenSSH功能。
OpenSSH是一套允許客戶端和服務器安全連接到Windows程序,早在2015年微軟就表示將支持。OpenSSH的Win32端口首先作為預覽發布功能包含在Windows 10 Fall Creators Update和Windows Server 1709版本中。在Windows 10 1803版本中,OpenSSH作為受支持的功能按需組件發布。如今,Windows Server 2019終于將OpenSSH作為支持功能。
OpenSSH支持安全的遠程登錄,遠程文件傳輸和公鑰/私鑰的管理。OpenSSH作為一個功能強大的工具,誕生于OpenBSD項目,已經在BSD,Linux,macOS和Unix生態系統中使用了很多年。將OpenSSH添加到Windows Server 2019意味著用戶可以在不同的操作系統(包括Windows)中使用相同的工具來進行遠程服務器管理。