Secure Shell (SSH) 是一個允許兩台電腦之間通過安全的連接進行數據交換的網絡協議。加密保證了數據的保密性和完整性。SSH采用公鑰加密技術來驗證遠程主機,以及(必要時)允許遠程主機驗證用戶。
SSH 通常用於遠程訪問和執行命令,但是它也支持隧道,轉發任意 TCP 端口以及 X11 連接;它還能夠用 SFTP 或 SCP 協議來傳輸文件。
一個 SSH 服務器,默認地,在 TCP 端口 22 進行監聽。一個 SSH 客戶端程序通常被用來建立一個遠程連接到 sshd 守護進程。這兩者都被廣泛地存在於現代操作系統中,包括 Mac OS X,GNU/Linux,Solaris 和 OpenVMS 等。以專利的,自由軟件的以及開源版本的形式和不同的復雜性和完整性存在。
配置SSH
客戶端
SSH客戶端的配置文件是/etc/ssh/ssh_config
或 ~/.ssh/config
.
現在已經不需要額外設置 Protocol 2
, 默認的協議已經是 Protocol 2
了(http://www.openssh.org/txt/release-5.4)。
守護進程
SSH 守護進程的配置文件是/etc/ssh/sshd_config
。
實例:
只允許某些用戶訪問的話,加入這一行:
AllowUsers user1 user2
只允許一些組訪問:
AllowGroups group1 group2
要禁止通過SSH進行root用戶登錄,加入以下行:
PermitRootLogin no
管理 sshd 守護進程
你可以使用下面的命令啟動sshd:
systemctl start sshd
你可以使用下面的命令開機啟動sshd:
systemctl enable sshd.service
ListenAddress 192.168.1.100
,它可能會在引導時啟動失敗,因為默認的 sshd.service 單元文件沒有對網絡接口啟動的依賴。當綁定到一個 IP 地址時,你需要添加
After=network.target
到自定義的 sshd.service 單元文件中。參見
Systemd#Replacing provided unit files
[broken link: invalid section].
或者你可以啟用SSH Daemon socket,這樣當第一次傳入連接時啟動守護進程:
systemctl enable sshd.socket
如果你使用非默認端口22,你必須在文件(/lib/systemd/system/sshd.socket)中設置"ListenStream"為相應的端口。
/etc/ssh/ssh_config配置文件說明:
Host * 選項“Host”只對能夠匹配后面字串的計算機有效。“*”表示所有的計算機。 ForwardAgent no “ForwardAgent”設置連接是否經過驗證代理(如果存在)轉發給遠程計算機。 ForwardX11 no “ForwardX11”設置X11連接是否被自動重定向到安全的通道和顯示集(DISPLAY set)。 RhostsAuthentication no “RhostsAuthentication”設置是否使用基於rhosts的安全驗證。 RhostsRSAAuthentication no “RhostsRSAAuthentication”設置是否使用用RSA算法的基於rhosts的安全驗證。 RSAAuthentication yes “RSAAuthentication”設置是否使用RSA算法進行安全驗證。 PasswordAuthentication yes “PasswordAuthentication”設置是否使用口令驗證。 FallBackToRsh no “FallBackToRsh”設置如果用ssh連接出現錯誤是否自動使用rsh。 UseRsh no “UseRsh”設置是否在這台計算機上使用“rlogin/rsh”。 BatchMode no “BatchMode”如果設為“yes”,passphrase/password(交互式輸入口令)的提示將被禁止。當不能交互式輸入口令的時候,這個選項對腳本文件和批處理任務十分有用。 CheckHostIP yes “CheckHostIP”設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設置為“yes”。 StrictHostKeyChecking no “StrictHostKeyChecking”如果設置成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”文件,並且一旦計算機的密匙發生了變化,就拒絕連接。 IdentityFile ~/.ssh/identity “IdentityFile”設置從哪個文件讀取用戶的RSA安全驗證標識。 Port 22 “Port”設置連接到遠程主機的端口。 Cipher blowfish “Cipher”設置加密用的密碼。 EscapeChar ~ “EscapeChar”設置escape字符。
/etc/ssh/sshd_config配置文件說明
Port 22 “Port”設置sshd監聽的端口號。 ListenAddress 192.168.1.1 “ListenAddress”設置sshd服務器綁定的IP地址。 HostKey /etc/ssh/ssh_host_key “HostKey”設置包含計算機私人密匙的文件。 ServerKeyBits 1024 “ServerKeyBits”定義服務器密匙的位數。 LoginGraceTime 600 “LoginGraceTime”設置如果用戶不能成功登錄,在切斷連接之前服務器需要等待的時間(以秒為單位)。 ClientAliveInterval 300(默認為0) 這個參數的是意思是每5分鍾,服務器向客戶端發一個消息,用於保持連接 KeyRegenerationInterval 3600 “KeyRegenerationInterval”設置在多少秒之后自動重新生成服務器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的信息。 PermitRootLogin no “PermitRootLogin”設置root能不能用ssh登錄。這個選項一定不要設成“yes”。 IgnoreRhosts yes “IgnoreRhosts”設置驗證的時候是否使用“rhosts”和“shosts”文件。 IgnoreUserKnownHosts yes “IgnoreUserKnownHosts”設置ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略用戶的“$HOME/.ssh/known_hosts” StrictModes yes “StrictModes”設置ssh在接收登錄請求之前是否檢查用戶家目錄和rhosts文件的權限和所有權。這通常是必要的,因為新手經常會把自己的目錄和文件設成任何人都有寫權限。 X11Forwarding no “X11Forwarding”設置是否允許X11轉發。 PrintMotd yes “PrintMotd”設置sshd是否在用戶登錄的時候顯示“/etc/motd”中的信息。 SyslogFacility AUTH “SyslogFacility”設置在記錄來自sshd的消息的時候,是否給出“facility code”。 LogLevel INFO “LogLevel”設置記錄sshd日志消息的層次。INFO是一個好的選擇。查看sshd的man幫助頁,已獲取更多的信息。 RhostsAuthentication no “RhostsAuthentication”設置只用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。 RhostsRSAAuthentication no “RhostsRSA”設置是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。 RSAAuthentication yes “RSAAuthentication”設置是否允許只有RSA安全驗證。 PasswordAuthentication yes “PasswordAuthentication”設置是否允許口令驗證。 PermitEmptyPasswords no “PermitEmptyPasswords”設置是否允許用口令為空的帳號登錄。 AllowUsers admin “AllowUsers”的后面可以跟着任意的數量的用戶名的匹配串(patterns)或user@host這樣的匹配串,這些字符串用空格隔開。主機名可以是DNS名或IP地址。