SSH 客戶端

簡(jiǎn)介

OpenSSH 的客戶端是二進(jìn)制程序 ssh。它在 Linux/Unix 系統(tǒng)的位置是/usr/local/bin/ssh,Windows 系統(tǒng)的位置是\Program Files\OpenSSH\bin\ssh.exe

Linux 系統(tǒng)一般都自帶 ssh,如果沒(méi)有就需要安裝。

# Ubuntu 和 Debian 

$ sudo apt install openssh-client 

# CentOS 和 Fedora 

$ sudo dnf install openssh-clients

安裝以后,可以使用-V參數(shù)輸出版本號(hào),查看一下是否安裝成功。

$ ssh -V 

基本用法

ssh 最常見(jiàn)的用途就是登錄服務(wù)器,這要求服務(wù)器安裝并正在運(yùn)行 SSH 服務(wù)器軟件。

ssh 登錄服務(wù)器的命令如下。

$ ssh hostname 

上面命令中,hostname是主機(jī)名,它可以是域名,也可能是 IP 地址或局域網(wǎng)內(nèi)部的主機(jī)名。不指定用戶名的情況下,將使用客戶端的當(dāng)前用戶名,作為遠(yuǎn)程服務(wù)器的登錄用戶名。如果要指定用戶名,可以采用下面的語(yǔ)法。

$ ssh user@hostname 

上面的命令中,用戶名和主機(jī)名寫(xiě)在一起了,之間使用@分隔。

用戶名也可以使用ssh-l參數(shù)指定,這樣的話,用戶名和主機(jī)名就不用寫(xiě)在一起了。

$ ssh -l username host 

ssh 默認(rèn)連接服務(wù)器的22端口,-p參數(shù)可以指定其他端口。

$ ssh -p 8821 foo.com 

上面命令連接服務(wù)器foo.com的8821端口。

連接流程

ssh 連接遠(yuǎn)程服務(wù)器后,首先有一個(gè)驗(yàn)證過(guò)程,驗(yàn)證遠(yuǎn)程服務(wù)器是否為陌生地址。

如果是第一次連接某一臺(tái)服務(wù)器,命令行會(huì)顯示一段文字,表示不認(rèn)識(shí)這臺(tái)機(jī)器,提醒用戶確認(rèn)是否需要連接。

The authenticity of host 'foo.com (192.168.121.111)' can't be established.
ECDSA key fingerprint is SHA256:Vybt22mVXuNuB5unE++yowF7lgA/9/2bLSiO3qmYWBY.
Are you sure you want to continue connecting (yes/no)? 

上面這段文字告訴用戶,foo.com這臺(tái)服務(wù)器的指紋是陌生的,讓用戶選擇是否要繼續(xù)連接(輸入 yes 或 no)。

所謂“服務(wù)器指紋”,指的是 SSH 服務(wù)器公鑰的哈希值。每臺(tái) SSH 服務(wù)器都有唯一一對(duì)密鑰,用于跟客戶端通信,其中公鑰的哈希值就可以用來(lái)識(shí)別服務(wù)器。

下面的命令可以查看某個(gè)公鑰的指紋。

$ ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 da:24:43:0b:2e:c1:3f:a1:84:13:92:01:52:b4:84:ff   (ECDSA) 

上面的例子中,ssh-keygen -l -f命令會(huì)輸出公鑰/etc/ssh/ssh_host_ecdsa_key.pub的指紋。

ssh 會(huì)將本機(jī)連接過(guò)的所有服務(wù)器公鑰的指紋,都儲(chǔ)存在本機(jī)的~/.ssh/known_hosts文件中。每次連接服務(wù)器時(shí),通過(guò)該文件判斷是否為陌生主機(jī)(陌生公鑰)。

在上面這段文字后面,輸入yes,就可以將當(dāng)前服務(wù)器的指紋也儲(chǔ)存在本機(jī)~/.ssh/known_hosts文件中,并顯示下面的提示。以后再連接的時(shí)候,就不會(huì)再出現(xiàn)警告了。

Warning: Permanently added 'foo.com (192.168.121.111)' (RSA) to the list of known hosts 

然后,客戶端就會(huì)跟服務(wù)器建立連接。接著,ssh 就會(huì)要求用戶輸入所要登錄賬戶的密碼。用戶輸入并驗(yàn)證密碼正確以后,就能登錄遠(yuǎn)程服務(wù)器的 Shell 了。

服務(wù)器密鑰變更

服務(wù)器指紋可以防止有人惡意冒充遠(yuǎn)程主機(jī)。如果服務(wù)器的密鑰發(fā)生變更(比如重裝了 SSH 服務(wù)器),客戶端再次連接時(shí),就會(huì)發(fā)生公鑰指紋不吻合的情況。這時(shí),客戶端就會(huì)中斷連接,并顯示一段警告信息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
77:a5:69:81:9b:eb:40:76:7b:13:04:a9:6c:f4:9c:5d.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending key in /home/me/.ssh/known_hosts:36 

上面這段文字的意思是,該主機(jī)的公鑰指紋跟~/.ssh/known_hosts文件儲(chǔ)存的不一樣,必須處理以后才能連接。這時(shí),你需要確認(rèn)是什么原因,使得公鑰指紋發(fā)生變更,到底是惡意劫持,還是管理員變更了 SSH 服務(wù)器公鑰。

如果新的公鑰確認(rèn)可以信任,需要繼續(xù)執(zhí)行連接,你可以執(zhí)行下面的命令,將原來(lái)的公鑰指紋從~/.ssh/known_hosts文件刪除。

$ ssh-keygen -R hostname 

上面命令中,hostname是發(fā)生公鑰變更的主機(jī)名。

除了使用上面的命令,你也可以手工修改known_hosts文件,將公鑰指紋刪除。

刪除了原來(lái)的公鑰指紋以后,重新執(zhí)行 ssh 命令連接遠(yuǎn)程服務(wù)器,將新的指紋加入known_hosts文件,就可以順利連接了。

執(zhí)行遠(yuǎn)程命令

SSH 登錄成功后,用戶就進(jìn)入了遠(yuǎn)程主機(jī)的命令行環(huán)境,所看到的提示符,就是遠(yuǎn)程主機(jī)的提示符。這時(shí),你就可以輸入想要在遠(yuǎn)程主機(jī)執(zhí)行的命令。

另一種執(zhí)行遠(yuǎn)程命令的方法,是將命令直接寫(xiě)在ssh命令的后面。

$ ssh username@hostname command 

上面的命令會(huì)使得 SSH 在登錄成功后,立刻在遠(yuǎn)程主機(jī)上執(zhí)行命令command

下面是一個(gè)例子。

$ ssh foo@server.example.com cat /etc/hosts 

上面的命令會(huì)在登錄成功后,立即遠(yuǎn)程執(zhí)行命令cat /etc/hosts。

采用這種語(yǔ)法執(zhí)行命令時(shí),ssh 客戶端不會(huì)提供互動(dòng)式的 Shell 環(huán)境,而是直接將遠(yuǎn)程命令的執(zhí)行結(jié)果輸出在命令行。但是,有些命令需要互動(dòng)式的 Shell 環(huán)境,這時(shí)就要使用-t參數(shù)。

# 報(bào)錯(cuò)

$ ssh remote.server.com emacs

emacs: standard input is not a tty

# 不報(bào)錯(cuò)

$ ssh -t server.example.com emacs

上面代碼中,emacs命令需要一個(gè)互動(dòng)式 Shell,所以報(bào)錯(cuò)。只有加上-t參數(shù),ssh 才會(huì)分配一個(gè)互動(dòng)式 Shell。

加密參數(shù)

SSH 連接的握手階段,客戶端必須跟服務(wù)端約定加密參數(shù)集(cipher suite)。

加密參數(shù)集包含了若干不同的加密參數(shù),它們之間使用下劃線連接在一起,下面是一個(gè)例子。

TLS_RSA_WITH_AES_128_CBC_SHA 

它的含義如下。

  • TLS:加密通信協(xié)議
  • RSA:密鑰交換算法
  • AES:加密算法
  • 128:加密算法的強(qiáng)度
  • CBC:加密算法的模式
  • SHA:數(shù)字簽名的 Hash 函數(shù)

下面是一個(gè)例子,客戶端向服務(wù)器發(fā)出的握手信息。

Handshake protocol: ClientHello
    Version: TLS 1.2
    Random
        Client time: May 22, 2030 02:43:46 GMT
        Random bytes: b76b0e61829557eb4c611adfd2d36eb232dc1332fe29802e321ee871
    Session ID: (empty)
    Cipher Suites
        Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256”
        Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        Suite: TLS_RSA_WITH_AES_128_GCM_SHA256
        Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        Suite: TLS_RSA_WITH_AES_128_CBC_SHA
        Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
        Suite: TLS_RSA_WITH_RC4_128_SHA
    Compression methods
        Method: null
    Extensions
        Extension: server_name
            Hostname: www.feistyduck.com
        Extension: renegotiation_info
        Extension: elliptic_curves
            Named curve: secp256r1
            Named curve: secp384r1
        Extension: signature_algorithms
            Algorithm: sha1/rsa
            Algorithm: sha256/rsa
            Algorithm: sha1/ecdsa
            Algorithm: sha256/ecdsa” 

上面的握手信息(ClientHello)之中,Cipher Suites字段就是客戶端列出可選的加密參數(shù)集,服務(wù)器在其中選擇一個(gè)自己支持的參數(shù)集。

服務(wù)器選擇完畢之后,向客戶端發(fā)出回應(yīng)。

Handshake protocol: ServerHello
    Version: TLS 1.2
    Random
        Server time: Mar 10, 2059 02:35:57 GMT”
        Random bytes: 8469b09b480c1978182ce1b59290487609f41132312ca22aacaf5012
    Session ID: 4cae75c91cf5adf55f93c9fb5dd36d19903b1182029af3d527b7a42ef1c32c80
    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    Compression method: null
    Extensions
        Extension: server_name
        Extension: renegotiation_info” 

上面的回應(yīng)信息(ServerHello)中,Cipher Suite字段就是服務(wù)器最終選定的加密參數(shù)。

ssh 命令行配置項(xiàng)

ssh 命令有很多配置項(xiàng),修改它的默認(rèn)行為。

-c

-c參數(shù)指定加密算法。

$ ssh -c blowfish,3des server.example.com 

# 或者 

$ ssh -c blowfish -c 3des server.example.com

上面命令指定使用加密算法blowfish3des。

-C

-C參數(shù)表示壓縮數(shù)據(jù)傳輸。

$ ssh -C server.example.com 

-D

-D參數(shù)指定本機(jī)的 Socks 監(jiān)聽(tīng)端口,該端口收到的請(qǐng)求,都將轉(zhuǎn)發(fā)到遠(yuǎn)程的 SSH 主機(jī),又稱動(dòng)態(tài)端口轉(zhuǎn)發(fā),詳見(jiàn)《端口轉(zhuǎn)發(fā)》一章。

$ ssh -D 1080 server 

上面命令將本機(jī) 1080 端口收到的請(qǐng)求,都轉(zhuǎn)發(fā)到服務(wù)器server。

-f

-f參數(shù)表示 SSH 連接在后臺(tái)運(yùn)行。

-F

-F參數(shù)指定配置文件。

$ ssh -F /usr/local/ssh/other_config 

上面命令指定使用配置文件other_config。

-i

-i參數(shù)用于指定私鑰,意為“identity_file”,默認(rèn)值為~/.ssh/id_dsa(DSA 算法)和~/.ssh/id_rsa(RSA 算法)。注意,對(duì)應(yīng)的公鑰必須存放到服務(wù)器,詳見(jiàn)《密鑰登錄》一章。

$ ssh -i my-key server.example.com 

-l

-l參數(shù)指定遠(yuǎn)程登錄的賬戶名。

$ ssh -l sally server.example.com 

# 等同于 

$ ssh sally@server.example.com

-L

-L參數(shù)設(shè)置本地端口轉(zhuǎn)發(fā),詳見(jiàn)《端口轉(zhuǎn)發(fā)》一章。

$ ssh  -L 9999:targetServer:80 user@remoteserver 

上面命令中,所有發(fā)向本地9999端口的請(qǐng)求,都會(huì)經(jīng)過(guò)remoteserver發(fā)往 targetServer 的 80 端口,這就相當(dāng)于直接連上了 targetServer 的 80 端口。

-m

-m參數(shù)指定校驗(yàn)數(shù)據(jù)完整性的算法(message authentication code,簡(jiǎn)稱 MAC)。

$ ssh -m hmac-sha1,hmac-md5 server.example.com 

上面命令指定數(shù)據(jù)校驗(yàn)算法為hmac-sha1hmac-md5

-N

-N參數(shù)用于端口轉(zhuǎn)發(fā),表示建立的 SSH 只用于端口轉(zhuǎn)發(fā),不能執(zhí)行遠(yuǎn)程命令,這樣可以提供安全性,詳見(jiàn)《端口轉(zhuǎn)發(fā)》一章。

-o

-o參數(shù)用來(lái)指定一個(gè)配置命令。

$ ssh -o "Keyword Value" 

舉例來(lái)說(shuō),配置文件里面有如下內(nèi)容。

User sally
Port 220 

通過(guò)-o參數(shù),可以把上面兩個(gè)配置命令從命令行傳入。

$ ssh -o "User sally" -o "Port 220" server.example.com 

使用等號(hào)時(shí),配置命令可以不用寫(xiě)在引號(hào)里面,但是等號(hào)前后不能有空格。

$ ssh -o User=sally -o Port=220 server.example.com 

-p

-p參數(shù)指定 SSH 客戶端連接的服務(wù)器端口。

$ ssh -p 2035 server.example.com 

上面命令連接服務(wù)器的2035端口。

-q

-q參數(shù)表示安靜模式(quiet),不向用戶輸出任何警告信息。

$ ssh –q foo.com
root’s password: 

上面命令使用-q參數(shù),只輸出要求用戶輸入密碼的提示。

-R

-R參數(shù)指定遠(yuǎn)程端口轉(zhuǎn)發(fā),詳見(jiàn)《端口轉(zhuǎn)發(fā)》一章。

$ ssh -R 9999:targetServer:902 local 

上面命令需在跳板服務(wù)器執(zhí)行,指定本地計(jì)算機(jī)local監(jiān)聽(tīng)自己的 9999 端口,所有發(fā)向這個(gè)端口的請(qǐng)求,都會(huì)轉(zhuǎn)向 targetServer 的 902 端口。

-t

-t參數(shù)在 ssh 直接運(yùn)行遠(yuǎn)端命令時(shí),提供一個(gè)互動(dòng)式 Shell。

$ ssh -t server.example.com emacs 

-v

-v參數(shù)顯示詳細(xì)信息。

$ ssh -v server.example.com 

-v可以重復(fù)多次,表示信息的詳細(xì)程度,比如-vv-vvv。

$ ssh -vvv server.example.com 

# 或者 

$ ssh -v -v -v server.example.com

上面命令會(huì)輸出最詳細(xì)的連接信息。

-V

-V參數(shù)輸出 ssh 客戶端的版本。

$ ssh –V
ssh: SSH Secure Shell 3.2.3 (non-commercial version) on i686-pc-linux-gnu 

上面命令輸出本機(jī) ssh 客戶端版本是SSH Secure Shell 3.2.3。

-X

-X參數(shù)表示打開(kāi) X 窗口轉(zhuǎn)發(fā)。

$ ssh -X server.example.com 

-1,-2

-1參數(shù)指定使用 SSH 1 協(xié)議。

-2參數(shù)指定使用 SSH 2 協(xié)議。

$ ssh -2 server.example.com 

-4,-6

-4指定使用 IPv4 協(xié)議,這是默認(rèn)值。

$ ssh -4 server.example.com 

-6指定使用 IPv6 協(xié)議。

$ ssh -6 server.example.com 

客戶端配置文件

位置

SSH 客戶端的全局配置文件是/etc/ssh/ssh_config,用戶個(gè)人的配置文件在~/.ssh/config,優(yōu)先級(jí)高于全局配置文件。

除了配置文件,~/.ssh目錄還有一些用戶個(gè)人的密鑰文件和其他文件。下面是其中一些常見(jiàn)的文件。

  • ~/.ssh/id_ecdsa:用戶的 ECDSA 私鑰。
  • ~/.ssh/id_ecdsa.pub:用戶的 ECDSA 公鑰。
  • ~/.ssh/id_rsa:用于 SSH 協(xié)議版本2 的 RSA 私鑰。
  • ~/.ssh/id_rsa.pub:用于SSH 協(xié)議版本2 的 RSA 公鑰。
  • ~/.ssh/identity:用于 SSH 協(xié)議版本1 的 RSA 私鑰。
  • ~/.ssh/identity.pub:用于 SSH 協(xié)議版本1 的 RSA 公鑰。
  • ~/.ssh/known_hosts:包含 SSH 服務(wù)器的公鑰指紋。

主機(jī)設(shè)置

用戶個(gè)人的配置文件~/.ssh/config,可以按照不同服務(wù)器,列出各自的連接參數(shù),從而不必每一次登錄都輸入重復(fù)的參數(shù)。下面是一個(gè)例子。

Host *
     Port 2222

Host remoteserver
     HostName remote.example.com
     User neo
     Port 2112 

上面代碼中,Host *表示對(duì)所有主機(jī)生效,后面的Port 2222表示所有主機(jī)的默認(rèn)連接端口都是2222,這樣就不用在登錄時(shí)特別指定端口了。這里的縮進(jìn)并不是必需的,只是為了視覺(jué)上,易于識(shí)別針對(duì)不同主機(jī)的設(shè)置。

后面的Host remoteserver表示,下面的設(shè)置只對(duì)主機(jī)remoteserver生效。remoteserver只是一個(gè)別名,具體的主機(jī)由HostName命令指定,UserPort這兩項(xiàng)分別表示用戶名和端口。這里的Port會(huì)覆蓋上面Host *部分的Port設(shè)置。

以后,登錄remote.example.com時(shí),只要執(zhí)行ssh remoteserver命令,就會(huì)自動(dòng)套用 config 文件里面指定的參數(shù)。
單個(gè)主機(jī)的配置格式如下。

$ ssh remoteserver 

# 等同于 

$ ssh -p 2112 neo@remote.example.com

Host命令的值可以使用通配符,比如Host *表示對(duì)所有主機(jī)都有效的設(shè)置,Host *.edu表示只對(duì)一級(jí)域名為.edu的主機(jī)有效的設(shè)置。它們的設(shè)置都可以被單個(gè)主機(jī)的設(shè)置覆蓋。

配置命令的語(yǔ)法

ssh 客戶端配置文件的每一行,就是一個(gè)配置命令。配置命令與對(duì)應(yīng)的值之間,可以使用空格,也可以使用等號(hào)。

Compression yes 

# 等同于 

Compression = yes

#開(kāi)頭的行表示注釋,會(huì)被忽略??招械韧谧⑨?。

主要配置命令

下面是 ssh 客戶端的一些主要配置命令,以及它們的范例值。

  • AddressFamily inet:表示只使用 IPv4 協(xié)議。如果設(shè)為inet6,表示只使用 IPv6 協(xié)議。
  • BindAddress 192.168.10.235:指定本機(jī)的 IP 地址(如果本機(jī)有多個(gè) IP 地址)。
  • CheckHostIP yes:檢查 SSH 服務(wù)器的 IP 地址是否跟公鑰數(shù)據(jù)庫(kù)吻合。
  • Ciphers blowfish,3des:指定加密算法。
  • Compression yes:是否壓縮傳輸信號(hào)。
  • ConnectionAttempts 10:客戶端進(jìn)行連接時(shí),最大的嘗試次數(shù)。
  • ConnectTimeout 60:客戶端進(jìn)行連接時(shí),服務(wù)器在指定秒數(shù)內(nèi)沒(méi)有回復(fù),則中斷連接嘗試。
  • DynamicForward 1080:指定動(dòng)態(tài)轉(zhuǎn)發(fā)端口。
  • GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file:指定全局的公鑰數(shù)據(jù)庫(kù)文件的位置。
  • Host server.example.com:指定連接的域名或 IP 地址,也可以是別名,支持通配符。Host命令后面的所有配置,都是針對(duì)該主機(jī)的,直到下一個(gè)Host命令為止。
  • HostKeyAlgorithms ssh-dss,ssh-rsa:指定密鑰算法,優(yōu)先級(jí)從高到低排列。
  • HostName myserver.example.com:在Host命令使用別名的情況下,HostName指定域名或 IP 地址。
  • IdentityFile keyfile:指定私鑰文件。
  • LocalForward 2001 localhost:143:指定本地端口轉(zhuǎn)發(fā)。
  • LogLevel QUIET:指定日志詳細(xì)程度。如果設(shè)為QUIET,將不輸出大部分的警告和提示。
  • MACs hmac-sha1,hmac-md5:指定數(shù)據(jù)校驗(yàn)算法。
  • NumberOfPasswordPrompts 2:密碼登錄時(shí),用戶輸錯(cuò)密碼的最大嘗試次數(shù)。
  • PasswordAuthentication no:指定是否支持密碼登錄。不過(guò),這里只是客戶端禁止,真正的禁止需要在 SSH 服務(wù)器設(shè)置。
  • Port 2035:指定客戶端連接的 SSH 服務(wù)器端口。
  • PreferredAuthentications publickey,hostbased,password:指定各種登錄方法的優(yōu)先級(jí)。
  • Protocol 2:支持的 SSH 協(xié)議版本,多個(gè)版本之間使用逗號(hào)分隔。
  • PubKeyAuthentication yes:是否支持密鑰登錄。這里只是客戶端設(shè)置,還需要在 SSH 服務(wù)器進(jìn)行相應(yīng)設(shè)置。
  • RemoteForward 2001 server:143:指定遠(yuǎn)程端口轉(zhuǎn)發(fā)。
  • SendEnv COLOR:SSH 客戶端向服務(wù)器發(fā)送的環(huán)境變量名,多個(gè)環(huán)境變量之間使用空格分隔。環(huán)境變量的值從客戶端當(dāng)前環(huán)境中拷貝。
  • ServerAliveCountMax 3:如果沒(méi)有收到服務(wù)器的回應(yīng),客戶端連續(xù)發(fā)送多少次keepalive信號(hào),才斷開(kāi)連接。該項(xiàng)默認(rèn)值為3。
  • ServerAliveInterval 300:客戶端建立連接后,如果在給定秒數(shù)內(nèi),沒(méi)有收到服務(wù)器發(fā)來(lái)的消息,客戶端向服務(wù)器發(fā)送keepalive消息。如果不希望客戶端發(fā)送,這一項(xiàng)設(shè)為0。
  • StrictHostKeyChecking yesyes表示嚴(yán)格檢查,服務(wù)器公鑰為未知或發(fā)生變化,則拒絕連接。no表示如果服務(wù)器公鑰未知,則加入客戶端公鑰數(shù)據(jù)庫(kù),如果公鑰發(fā)生變化,不改變客戶端公鑰數(shù)據(jù)庫(kù),輸出一條警告,依然允許連接繼續(xù)進(jìn)行。ask(默認(rèn)值)表示詢問(wèn)用戶是否繼續(xù)進(jìn)行。
  • TCPKeepAlive yes:客戶端是否定期向服務(wù)器發(fā)送keepalive信息。
  • User userName:指定遠(yuǎn)程登錄的賬戶名。
  • UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file:指定當(dāng)前用戶的known_hosts文件(服務(wù)器公鑰指紋列表)的位置。
  • VerifyHostKeyDNS yes:是否通過(guò)檢查 SSH 服務(wù)器的 DNS 記錄,確認(rèn)公鑰指紋是否與known_hosts文件保存的一致。
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清