1. 如何通過ssh遠程登錄linux系統
通緩喚過ssh遠程登錄linux系統步驟如下:
1、啟動軟體,點擊快速連接,我們要選擇連接的協議。
2. SSH 之遠程登錄
從客戶端來看,SSH提供兩種級別的安全驗證。
對於第二種級別,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。第二種級別不僅加密所有傳送的數據,而且「中間人」這鉛乎種攻擊方式也是不可能的(因為他沒有用戶的私人密匙)。但是整個登錄的過程可能需要10秒。
將本地用戶生成的公鑰推送至遠程伺服器後,遠程主機將用戶的公鑰,保存在登錄後的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字元串,只要把它追加在authorized_keys文件的末尾就行了。
這里不使用ssh--id命令,改用下面的命令,來解釋公鑰的保存過程:
輸入命令 ssh user@host ,然後根據提示輸入遠程伺服器的登錄密碼
也可在配置文件/etc/ssh/ssh_config 中設置user和host(ip), 來簡化命令, 配置如下:
配置後, 登錄請求時只需輸入如洞悉下命令:
使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。
公鑰登錄原理 :就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字元串,用戶用自己的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,如果解密驗證成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。
執行上述命令首先會讓你輸入生成密鑰的文件名: myPemKey (自定義),之後一路回車。
配置後,登錄遠槐顫悉程伺服器時只需輸入一下命令,便可直接登錄成功:
修改後重啟ssh服務
則遠程連接時指定埠
(1) 通過iptables設置ssh埠的白名單,如下設置只允許192.168.1.0/24網段的客戶機可以遠程連接本機
(2) 通過/etc/hosts.allow裡面進行限制(如下),/etc/hosts.deny文件不要任何內容編輯,保持默認!
例如:
修改遠程伺服器ssh服務配置文件/etc/ssh/sshd_config
修改遠程伺服器配置文件/etc/ssh/sshd_config, 如下:
如果本機系統有些賬號沒有設置密碼,而ssh配置文件里又沒做限制,那麼遠程通過這個空密碼賬號就可以登陸了,這是及其不安全的,所以一定要禁止空密碼登陸。
修改遠程伺服器配置文件/etc/ssh/sshd_config,如下:
參考:
3. 請教如何用ssh連接遠程伺服器
目前,遠程連接伺服器的類型有以下幾種:
① 文字介面的明文傳輸:Telnet、RSH為主,很少用到。
② 文字介面的加密傳輸:以SSH為主,已經取代了上面的明文傳輸方式。
③ 圖形介面:XDMCP、VNC、XRDP等較為常見。
這篇文章只為實戰,不為普及概念性知識。所以我只講解在工作中最常用到的技術SSH。關於SFTP技術和VNC技術,請查閱我的其他博客。
好,先來看一下SSH的相關技術:
SSH,英文全程是Secure Shell Protocol(安全的殼程序協議)。SSH是現在公司基本上都在使用的一種文字介面的加密傳輸技術,採用的是非對稱秘鑰系統。
對於SSH的原理,你們可以參考我的另外一篇博客,我把鏈接貼在這里:
SSH原理
⑴來吧,我們先來查看一下sshd這個服務(這就是SSH的遠程連接必須開啟的服務,屬於系統自帶),注意,一般這個sshd服務是默認自動開啟的。
注意:切記authorized_keys這個文件的許可權必須是644
4. SSH原理 and SSH遠程登錄
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的安全網路協議。它是專為遠程登錄會話(甚至可以用Windows遠程登錄Linux伺服器進行文件互傳)和其他網路服務提供安全性的協議,可有效彌補網路中的漏洞。通過SSH,可以把所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。目前已經成為Linux系統的標准配置。
SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文主要介紹OpenSSH免費開源實現在Ubuntu中的應用,如果要在Windows中使用SSH,需要使用另一個軟體PuTTY。
SSH之所以能夠保證安全,原因在於它採用了非對稱加密技術(RSA)加密了所有傳輸的數據。
傳統的網路服務程序,如FTP、Pop和Telnet其本質上都是不安全的;因為它們在網路上用明文傳送數據、用戶帳號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個人或者一台機器冒充真正的伺服器接收用戶傳給伺服器的數據,然後再冒充用戶把數據傳給真正的伺服器。
但並不是說SSH就是絕對安全的,因為它本身提供兩種級別的驗證方法:
第一種級別(基於口令的安全驗證):只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的伺服器就是你想連接的伺服器。可能會有別的伺服器在冒充真正的伺服器,也就是受到「中間人攻擊」這種方式的攻擊。
第二種級別(基於密鑰的安全驗證):你必須為自己創建一對密鑰,並把公鑰放在需要訪問的伺服器上。如果你要連接到SSH伺服器上,客戶端軟體就會向伺服器發出請求,請求用你的密鑰進行安全驗證。伺服器收到請求之後,先在該伺服器上你的主目錄下尋找你的公鑰,然後把它和你發送過來的公鑰進行比較。如果兩個密鑰一致,伺服器就用公鑰加密「質詢」(challenge)並把它發送給客戶端軟體。客戶端軟體收到「質詢」之後就可以用你的私鑰在本地解密再把它發送給伺服器完成登錄。與第一種級別相比,第二種級別不僅加密所有傳輸的數據,也不需要在網路上傳送口令,因此安全性更高,可以有效防止中間人攻擊。
SSH分為客戶端 openssh-client 和伺服器 openssh-server,可以利用以下命令確認電腦上是否安裝了客戶端和伺服器。
如果只是想遠程登陸別的機器只需要安裝客戶端(Ubuntu默認安裝了客戶端),如果要開放本機的SSH服務就需要安裝伺服器。
首先確認ssh-server是否已經啟動了
如圖,sshd 表示ssh-server已經啟動了。如果沒有啟動,可以使用如下命令啟動:
停止和重啟ssh服務的命令如下:
接下來就可以進行使用客戶機遠程登錄伺服器了~
口令登錄非常簡單,只需要一條命令,命令格式為: **ssh 客戶端用戶名@伺服器ip地址 **eg:
如果需要 調用圖形界面程序 可以使用 -X 選項
如果客戶機的用戶名和伺服器的 用戶名相同 ,登錄時 可以省略 用戶名。
還要說明的是,SSH服務的 默認埠是22 ,也就是說,如果你不設置埠的話登錄請求會自動送到遠程主機的22埠。我們可以使用** -p 選項來修改埠號**,比如連接到伺服器的1234埠:
客戶機必須要知道伺服器的 ip地址 。可以在伺服器端電腦上利用** ifconfig** 命令查看該機的ip地址:
如果是第一次登錄遠程主機,系統會給出下面提示:
意思是,該遠程主機的真實性無法確定,其公鑰指紋為 SHA256:s8pZiuKQr7k7f+57j22lk/IdWC8143VQKR+EabeP5,確定想要繼續連接嗎?
輸入yes 即可。這時系統會提示遠程主機被添加到已知主機列表。
然後會要求我們輸入 遠程主機的密碼 ,輸入的密碼正確就可以成功登錄了。命令提示符會修改為遠程主機的提示符,現在開始,終端中輸入的命令都將在伺服器中執行。
我們可以通過** Ctrl+D** 或者 exit 命令 退出遠程登錄 。
每次登錄遠程主機都需要輸入密碼是很不方便的,如果想要省去這一步驟,可以利用密鑰對進行連接,還可以提高安全性。
1、在本機生成密鑰對
使用ssh-keygen命令生成密鑰對:
ssh-keygen -t rsa #-t表示類型選項,這里採用rsa加密演算法
然後根據提示一步步的按enter鍵即可(其中有一個提示是要求設置私鑰口令passphrase,不設置則為空,這里看心情吧,如果不放心私鑰的安全可以設置一下),執行結束以後會在 /home/當前用戶 目錄下生成一個 .ssh 文件夾,其中包含私鑰文件 id_rsa 和公鑰文件 id_rsa.pub。
2、將公鑰復制到遠程主機中
使用ssh--id命令將公鑰復制到遠程主機。ssh--id會將公鑰寫到遠程主機的 ~/ .ssh/authorized_key 文件中
ssh--id [email protected]
經過以上兩個步驟,以後再登錄這個遠程主機就不用再輸入密碼了。
1)已獲取登錄實例的管理員帳號及密碼(或密鑰)。
2)雲伺服器實例已開通22號埠。
—使用密碼登錄
Host Name(or IP address) :伺服器的IP地址;
Port :伺服器的埠,必須設置為22;
Connect type :選擇 「SSH」;
Saved Sessions :填寫會話名稱,例如 test。 配置 「Host Name」 後,再配置 「Saved Sessions」 並保存,則後續使用時您可直接雙擊 「Saved Sessions」 下保存的會話名稱即可登錄伺服器;
登錄完成後,命令提示符左側將顯示當前登錄雲伺服器的信息。
—使用密鑰登錄
Ps: 當不存在私鑰文件時,可以選擇Conversions > Import key 導入公鑰(.pem)文件來生成私鑰文件(.ppk)
Host Name (IP address) :伺服器的IP;
Port :伺服器的埠,必須填 22;
Connect type :選擇 「SSH」;
Saved Sessions :填寫會話名稱,例如 test。 配置 「Host Name」 後,再配置 「Saved Sessions」 並保存,則後續使用時您可直接雙擊 「Saved Sessions」 下保存的會話名稱即可登錄伺服器;
登錄完成後,命令提示符左側將顯示當前登錄伺服器的信息。
5. SSH 登錄流程分析
登錄流程
密鑰登錄比密碼登錄安全,主要是因為他使用了非對稱加密,登錄過程中需要用到 密鑰對 。整個登錄流程如下:
遠程伺服器持有公鑰,當有用戶進行登錄,伺服器就會隨機生成一串字元串,然後發送給正在進行登錄的用戶。
用戶收到遠程伺服器發來的字元串,使用與 遠程伺服器公鑰配對的私鑰 對字元串進行加密,再發送給遠程伺服器。
伺服器使用公鑰對用戶發來的加密字元串進行解密,得到的解密字元串如果與第一步中發送給客戶端的隨機字元串一樣,那麼判斷為登錄成功。
整個登錄的流程就是這么簡單,但是在實際使用 ssh 登錄中還會碰到一些小細節歷亮,這里演示一遍 ssh 遠程登錄來展示下這些細節問題。
生成密鑰對
使用ssh-keygen就可以直接生成登錄需要的密鑰對。ssh-keygen是 Linux 下的命令,不添加任何參數就可以生成密鑰對。
➜ ~ ssh-keygenGenerating public/private rsa key pair.Enter fileinwhichto save the key (/home/jaychen/.ssh/id_rsa):#1Enter passphrase (emptyforno passphrase):#2Enter same passphrase again:#3
執行ssh-keygen會出現如上的提示,在#1處這里鏈睜提示用戶輸入生成的私鑰的名稱,如果不填,默認私鑰保存在/home/jaychen/.ssh/id_rsa文件中。這里要注意兩點:
生成的密鑰,會放在 執行ssh-keygen命令的用戶的家目錄 下的.ssh文件夾中。即$HOME/.ssh/目錄下。
生成的公鑰的文件名,通常是私鑰的文件名後面加.pub的後綴。
#2處,提示輸入密碼,注意這里的密碼是用來保證私鑰的安全的。如果填寫了密碼,那麼在使用密鑰進行登錄的時候,會讓你輸入密碼,這樣子保證了如果私鑰丟失了不至於被惡意使用。 話是這么說,但是平時使用這里我都是直接略過。
#3是重復#2輸入的密碼,這里就不廢話了。
生成密鑰之後,就可以在/home/jaychen/.ssh/下看到兩個文件了(我這里會放在/home/jaychen下是因為我使用 jaychen 用戶來執行ssh-keygen命令)
➜ .ssh ls
total 16K
drwx------ 2 jaychen jaychen 4.0K 12月 7 17:57 .
drwx------ 9 jaychen jaychen 4.0K 12月 7 18:14 ..
-rw------- 1 jaychen jaychen 1.7K 12月 7 17:57 id_rsa.github
-rw-r--r-- 1 jaychen jaychen 390 12月 7 17:57 id_rsa.github.pub
生成的私鑰還要注意一點: 私鑰的許可權應該為rw-------,如果私鑰的許可權過大,那麼私鑰任何人都可以讀寫就會變得不安全。ssh 登錄就會失敗。
首次 ssh 登錄
登錄遠程伺服器的命令是
ssh 登錄用戶@伺服器ip
這里開始要注意兩個用戶的概念:
本地執行這條命令的用戶,即當前登錄用戶,我這里演示的用戶名稱是 jaychen。
要登錄到遠程伺服器的用戶。
在開始登錄之前,我們棚爛歲要首先要把生成 公鑰 上傳到伺服器。
公鑰的內容要保存到 要登錄的用戶的家目錄下的.ssh/authorized_keys 文件中。假設你之後要使用 root 用戶登錄遠程伺服器,那麼公鑰的內容應該是保存在/root/.ssh/authorized_keys中。注意authorized_keys文件是可以保存多個公鑰信息的,每個公鑰以換行分開。
上傳完畢之後,執行
ssh root@遠程伺服器ip
這個時候,如上面說的,遠程伺服器會發送一段隨機字元串回來,這個時候需要使用私鑰對字元串進行加密。而這個私鑰會去 執行該命令的用戶的家目錄下的.ssh目錄 讀取私鑰文件,默認私鑰文件為id_rsa文件。即$HOME/.ssh/id_rsa文件。假設在生成密鑰的時候對私鑰進行了加密,那麼這個時候就需要輸入密碼。
上面的流程用戶登錄的時候是不會感知的,ssh 在背後完成了所有的校驗操作,如果密鑰匹配的話,那麼用戶就可以直接登錄到遠程伺服器,但是如果是 首次登錄 的話,會出現類似下面的提示:
➜ .ssh ssh [email protected] authenticityofhost'192.168.1.1 (192.168.1.1)' can't be established.ECDSAkeyfingerprintisSHA256:61U/SJ4n/.Are you sure you wanttocontinueconnecting (yes/no)?
這句話的意思是,遠程伺服器的真實身份無法校驗,只知道公鑰指紋(公鑰的 MD5 值)為61U/SJ4n/,是否真的要建立連接。出現上面的提示是因為避免存在 中間人攻擊 。
中間人攻擊
中間人攻擊的前提是,你第一次登錄一台遠程伺服器,你除了用戶名、用戶名對應的公鑰私鑰以及伺服器 ip 之外,對遠程伺服器絲毫不了解的情況下。假設你 ssh 遠程登錄 192.168.1.1 的遠程主機,在連接過程中被第三者攔截,第三者假冒自己為 192.168.1.1 的主機,那麼你就會直接連接到其他人的伺服器上。這就是中間人攻擊。
為了避免中間人攻擊,ssh 在首次登錄的時候會返回公鑰指紋,用戶需要自己手動去 比對你要登錄的遠程伺服器的公鑰的公鑰指紋和 ssh 返回的公鑰指紋是否一樣 。
經過比較公鑰指紋,確認該伺服器就是你要登錄的伺服器,輸入yes之後就可以成功登錄。整個登錄流程結束。
known_hosts 文件
第一次登錄之後,在本機的$HOME/.ssh/目錄下就會生成一個known_hosts的文件,內容類似下面
➜ .ssh cat known_hosts192.168.1.1ecdsa-sha2-nistp256 GV0rFcI0z/DHZizN5l/ajApsgx+UcOOh51liuyBRRCIyF+BR56Le0lP0Pn6nzvLjbqMqg=
這個文件記錄了遠程主機 ip 和遠程主機對應的公鑰指紋,那麼在下次登錄的時候,遠程主機發送過來的公鑰指紋,直接和known_hosts文件中對應 ip 的公鑰指紋比較即可。
config 配置
很多時候,我們開發可能需要連接多台遠程伺服器,並且需要配置 git 伺服器的私鑰。那麼這么多的伺服器不能共用一套私鑰,不同的伺服器應該使用不同的私鑰。但是我們從上面的連接流程可以看到,ssh 默認是去讀取$HOME/.ssh/id_rsa文件作為私鑰登錄的。如果想要不同的伺服器使用不同的私鑰進行登錄,那麼需要在.ssh目錄下編寫config文件來進行配置。
config的配置很簡單,只要指明哪個用戶登錄哪台遠程伺服器需要使用哪個私鑰即可。下面給出一個配置示例。
Host github.com
User jaychen
IdentityFile ~/.ssh/id_rsa.github
Host 192.168.1.1
User ubuntu
IdentityFile ~/.ssh/id_rsa.xxx
上面config文件欄位含義如下:
Host 指明了遠程主機的 ip,除了使用 ip 地址,也可以直接使用網址。
User 指的是登錄遠程主機的用戶。
IdentityFile 指明使用哪個私鑰文件。
6. 如何使用SSH登錄遠程伺服器
你好,
默認配置
Windows下有很多SSH工具。在這里我是用的是Putty。如果安裝了Git並配置使用Putty的話,就不需要另外在安裝Putty了。使用SSH連接伺服器的命令如下:
ssh IP地址
一般來說為了安全性考慮,埠號等一些參數並不會使用默認值。這樣的話命令就變成這樣:
ssh 用戶名@IP地址 -p 埠號
如果連接成功的話會提示你輸入遠程伺服器的密碼。全部成功之後SSH就會顯示遠程伺服器的提示符,這時候就說明連接成功了。
密鑰登錄
每次登錄SH都需要輸入密碼很麻煩,而且可能不太安全。SSH還能使用另外一種登錄方式,也就是使用密鑰登錄。這種登錄方式需要客戶端生成一堆公鑰私鑰對,然後將公鑰添加到伺服器中,這樣下次就可以直接登錄了。
首先生成SSH密鑰,依照提示輸入信息即可。默認生成在用戶主目錄中的.ssh文件夾中。帶pub的是公鑰,接下來需要添加到伺服器中。
ssh-keygen
然後將本地公鑰添加到伺服器中,需要使用另一個命令:
scp -P 埠號 本地文件路徑 用戶名@遠程伺服器地址:遠程路徑
然後登陸伺服器,找到復制進去的公鑰,將公鑰名字改為authorized_keys並添加到對應的.ssh文件夾中。然後退出SSH重新登陸試試,成功的話不需要輸入密碼就會直接進入遠程伺服器。
7. 使用 SSH-Key 登錄遠程伺服器
ssh 提供兩種級別的安全認證:
需要知道用戶名和密碼即可登錄,該連接是加凱缺密的,但客戶端不能確認目標主機是否為「偽造的」,也不能保證口令安全。
遠程主機的 /etc/ssh/sshd_config 需配置:
重啟 sshd 使改動生效:
需要用戶持有「公鑰/私鑰對」,慶褲遠程伺服器持有公鑰,本地持有私鑰。
客戶端向伺服器發出請求。伺服器收到請求之後,先在用戶的主目錄下找到該用戶的公鑰,然後對比用戶發送過來的公鑰。如果一致,伺服器用公鑰加密「質詢」並發送給客戶端。客戶端收到「質詢」後用私鑰解密,再發還給伺服器。認證結束。
生成 ssh-key,選加密演算法(rsa、dsa),給秘鑰命名(可選):
passphrase 是證書口令,以加強安全性,避免證書被惡意復制。
會在 ~.ssh 下生成 id_rsa , id_rsa.pub 兩個文件,分譽孫簡別是 私鑰/公鑰。
公鑰需保存到遠程伺服器 ~/.ssh/authorized_keys 里,私鑰由客戶端本地留存。
要保證 .ssh 和 authorized_keys 都只有用戶自己有寫許可權。否則驗證無效。
簡單情況下,通過手動指定私鑰文件登錄
覺得麻煩可以配置客戶端的 /etc/ssh/ssh_config
你也可以使用 SSH Agent,下面以使用 GitHub 為場景簡單介紹。
創建 ~/.ssh/config
配置完成後,在連接非默認賬號的倉庫時,遠端地址要修改為
8. ssh 命令怎麼用
ssh命令用法:ssh+加要執行的命令,需在SSH 2客戶端上使用。x0dx0a1、SSH客戶端版本查看。x0dx0a有裂族時需確認SSH客戶端及其相應的版本號。使用ssh -V命令可以得到版本號。注意,Linux一般自帶的是OpenSSH: 下面例子即表明該系統正在使用OpenSSH:x0dx0a$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003。x0dx0a下面的例子表明該系統正在使用SSH2:x0dx0a$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu。x0dx0a2、用SSH登錄到遠程主機。x0dx0a當第一次使用ssh登錄遠程主機時,會出現沒有找到主機密鑰的提示信息。輸入"yes"後,系統會將遠程主機的密鑰加入到主目錄下.ssh/hostkeys下,這樣就可繼續操作。x0dx0a3、調試SSH客戶端會話。x0dx0a當ssh連接出現問題時,需通過查看調試信息來定位這些錯誤。使用v選項(注意:是小寫的v),即可查看調試信息。x0dx0a4、用SSH退出符切換SSH會話。x0dx0a遠程登陸到一台主機A,然後從A登陸到B,如希望在A上做操作,還得再開一個終端。x0dx0a當使用ssh從本機登錄到遠程主機時,希望切換到本地做一些操作,然後再重新回到遠程主機。這時,不需中斷ssh連接,只需按照如下步驟操作即可:x0dx0a當已經登錄到了遠程主機時,可能想要回到本地主機進行段源圓一些操作,然後又繼續回到遠程主機。x0dx0a(1)登入遠程主機:x0dx0alocalhost$ ssh -l jsmith remotehost。x0dx0a(2)已連接遠程主機:x0dx0aremotehost$。x0dx0a(3)要臨時回到本握塌地主機,輸入退出符號:「~」與「Control-Z」組合。x0dx0a當輸入「~」不會立即在屏幕上看到,按下
9. 配置ssh遠程登錄
本地和遠程伺服器都創建
在創建密鑰的時候,可以定義加密類型和長局斗度,具體可以參考ssh-keygen命令幫助。創建的過程中,首先會提示你 保存的位置 和 文件名 ,再提示你 給密鑰加個密碼 ,也可以直接回桐差磨車不要密碼。
公鑰和私鑰默認保存這用戶目錄的 /.ssh/ 文件夾下。默認情況下, id_rsa 為私鑰, id_rsa.pub 為公鑰。
此時 還是需要用用戶名和密碼登錄遠程Linux伺服器。使用vi編輯 /etc/ssh/sshd_config 文件,先打開 PubkeyAuthentication 和 PermitRootLogin ,一般只要把這幾個參數慶叢前面的#(注釋符)刪掉即可。
重啟ssh服務
在macOS端操作以下命令,把公鑰上傳到遠程伺服器,會提示輸入遠程的Linux伺服器的密碼。
在遠程Linux伺服器上,操作以下命令,把公鑰 追加 到伺服器ssh認證文件中:
如果沒有 authorized_keys 這個文件,請到 .ssh 文件夾下創建一個,並把許可權設置為600。
追加好後,如果要禁止用戶名密碼登錄,再編輯 /etc/ssh/sshd_config 文件,把 PasswordAuthentication 設置為no。
重啟SSH服務(每次修改ssh配置都需要重啟)
如果沒有設置密鑰密碼,直接這終端輸入 ssh root@IP 即可登錄遠程伺服器。如果該用戶下沒有公鑰,則會提示Permission denied。