1. 程式人生 > >ssh和ssh2之間的免密碼登陸詳解

ssh和ssh2之間的免密碼登陸詳解

SSH為Secure Shell的縮寫,由IETF的網路工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協議。在維基百科上,有關於SSH的詳細詞條,但通俗點說,SSH能夠讓一個客戶端安全的登入上一個伺服器上進行管理操作。所以,忘掉FTP、POP和Telnet吧,專心來愛SSH。

讓我們從最基礎的部分開始,首先假定我們有臺Macbook,然後想登入上一臺Ubuntu伺服器進行管理操作,那麼首先要求Ubuntu伺服器上 安裝了SSH服務。SSH服務最早是由芬蘭的一家公司開發,現在已經發展到SSH2版本,但由於版權和加密演算法等因素的影響,很多人開始轉用 OpenSSH,聽這名字,就知道它是開源和免費的。

以下所有操作都需要具備root許可權的賬號,通常我們不太建議在伺服器上直接登入為root,所以一般會登入為普通使用者,然後通過在命令前面加上sudo來獲取root許可權。

1.我們先慣例一下

sudo apt-get update sudo apt-get upgrade

2.然後開始安裝OpenSSH服務

sudo apt-get install openssh-server

3.Ubuntu會幫我們解決一切依賴關係問題並且安裝好OpenSSH服務,接下來可以做一些配置來實現更快更安全的目的具體的修改可以參見這裡

至此安裝已經結束了,下面我們可以從Macbook上登入試試,假設Ubuntu上存在一個使用者tester。在Macbook上選擇應用程式 – 實用工具 – 終端,然後在開啟的終端裡面輸入

#注意這裡S_IP是伺服器的真實IP地址 ssh tester@S_IP

然後就會問你test的密碼,輸入密碼就可以成功登入進行操作了。

每次都輸入密碼會很煩,而且也不安全,同時還有其他一些潛在的風險,所以SSH也提供基於金鑰的認證機制,你必須為自己建立一對金鑰,並把公鑰放在 需要訪問的伺服器上。客戶端軟體會向伺服器發出請求,請求用你的私匙進行安全驗證。伺服器收到請求之後,先在你在該伺服器的使用者根目錄下尋找你的公鑰,然 後把它和你傳送過來的公鑰進行比較。如果兩個金鑰一致,伺服器就用公有金鑰加密“質詢”(challenge)並把它傳送給客戶端軟體。從而避免被“中間 人”攻擊。

由於之前所說的原因,會出現一種蛋疼的情況,有些公司還喜歡使用SSH2版本的SSH服務,SSH2和OpenSSH的加密演算法是完全不一樣的,他們所使用的的金鑰對也不相容,所以會出現下面4種組合
1. OpenSSH客戶端對OpenSSH伺服器
2. SSH2客戶端對SSH2伺服器
3. OpenSSH客戶端對SSH2伺服器
4. SSH2客戶端對OpenSSH伺服器
假設客戶端C試圖使用使用者tester登入伺服器S,我們來看看各種組合下如何使用金鑰登入

1. OpenSSH客戶端對OpenSSH伺服器,這是最簡單和最常見的情況
首先在C上操作

ssh-keygen -t rsa

生成的私鑰儲存在~/.ssh/id_rsa,注意私鑰一定要是這個名字,除非你更改C的ssh客戶端配置,然後將公鑰id_rsa.pub上傳到S上去

#這裡S_IP是伺服器的真實IP,並假定使用者tester的主目錄是/home/tester scp ~/.ssh/id_rsa.pub tester@S_IP:/home/tester/.ssh/

然後在伺服器S上做如下操作

cd /home/tester/.ssh cat id_rsa.pub >> authorized_keys

退出伺服器S,然後從C上重新登入一下

ssh tester@S_IP

不出意外,你再也不用輸入密碼了。

2. SSH2客戶端對SSH2伺服器
這種情況也很簡單,因為SSH2版本的ssh服務已經有了個新的工具ssh-keygen2。
首先在C上操作

ssh-keygen2 -t rsa

注意,這將會在C上當前使用者的目錄的這個位置~/.ssh2/生成一對金鑰id_rsa_2048_a和id_rsa_2048_a.pub
你必須在~/.ssh2/目錄下建立一個檔案identification,並通過它來指定私鑰

cd ~/.ssh2/ vi identification #輸入如下內容 IdKey id_rsa_2048_a #儲存修改

然後將公鑰id_rsa_2048_a.pub傳到伺服器S上去

#這裡S_IP是伺服器的真實IP,並假定使用者tester的主目錄是/home/tester scp ~/.ssh2/id_rsa_2048_a.pub tester@S_IP:/home/tester/.ssh2/

然後在伺服器S上做如下操作

cd /home/tester/.ssh2 vi authorization #在裡面新增一行 Key id_rsa_2048_a.pub #儲存修改

退出伺服器S,然後從C上重新登入一下

ssh tester@S_IP

不出意外,這能夠工作了。

3. OpenSSH客戶端對SSH2伺服器
這種情況是最複雜的一種,網路上很多的免密碼登入SSH的文章都沒有涉及到這種,下面具體介紹一下應該如何配置
首先在C上操作

ssh-keygen -t rsa

生成的私鑰儲存在~/.ssh/id_rsa,注意私鑰一定要是這個名字,除非你更改C的ssh客戶端配置,然後你需要做一件事情,就是將公鑰轉換成為SSH2所相容的模式,使用以下的指令

cd ~/.ssh/ ssh-keygen -e -f id_rsa.pub > id_rsa_2.pub

然後將公鑰id_rsa_2.pub上傳到S上去

#這裡S_IP是伺服器的真實IP,並假定使用者tester的主目錄是/home/tester scp ~/.ssh2/id_rsa_2.pub tester@S_IP:/home/tester/.ssh2/

然後在伺服器S上做如下操作

cd /home/tester/.ssh2 vi authorization #在裡面新增一行 Key id_rsa_2.pub #儲存修改

退出伺服器S,然後從C上重新登入一下

ssh tester@S_IP

不出意外,這能夠工作了。

4. SSH2客戶端對OpenSSH伺服器
這種情況是最蛋疼的,應該非常少見吧?這意味你將用一臺商業授權的伺服器去管理一臺開源的伺服器?希望你的工作不用這麼糾結,雖然這種情況的配置是非常簡單的,基本和1一致,因為SSH2原生也支援SSH1,所以就請大家參見1的配置了。

如果瞭解完了上面所說的一切,包括引用連結,你就完全夠將SSH應用到工作的各個方面的,下面還會稍微透露一下,平時可能需要了解到的一些祕籍

1.SSH2金鑰和OpenSSH金鑰的相互轉換。

#OpenSSH轉SSH2 ssh-keygen -e -f OpenSSH.pub > SSH2.pub #SSH2轉OpenSSH2 ssh-keygen -i -f SSH2.pub > SSH2.pub

2.平時如果我們在Windows環境下,通常會使用SecureCRT,XShell以及Putty等優秀的SSH客戶端軟體,它們可以讓SSH 的工作變得更輕鬆,但如果在Mac或者Linux環境下,命令列的SSH操作則更自然,那麼你知道在命令列下的SSH如何使用代理嘛,當需要的時候?
下面以OpenSSH客戶端為例,假設有兩個伺服器S1和S2,需要通過一個代理伺服器P1的80端口才能夠連線。

vi ~/.ssh/config #修改如下內容 Host S1_IP S2_IP     ProxyCommand nc -X connect -x P1:80 %h %p     ServerAliveInterval 60

此外,在使用scp都時候還有可能因為ssh和ssh2的問題出現如下錯誤:
		
"scp - FATAL: Executing ssh1 in compatibility mode failed (check that scp1 is in your PATH)." Quote 1: This problem is often quite perplexing, since a ssh -V trace may show that you're using SSH-2 - so what is a message about "ssh1 compatibility mode " doing in there? What's happening is this:      1. On the OpenSSH client, you run say, scp foo server:bar   2. scp runs ssh in a subprocess to connnect to the server, and run the remote command scp -t bar. This      is intend to start an instance of the scp program on the server, and the two scp's will cooperate by      speaking over the SSH connection, to retrieve the file.   3. ssh connects to the server (using either protocol 1 or 2, it doesn't matter), and runs the remote scp      command. However, the "scp" that gets run on the server is the SSH2 scp program (scp2), not the      OpenSSH one. The crux of the problem is: besides the name, these two scp's have exactly nothing in      common. scp2 cannot speak the file-transfer protocol that OpenSSH scp does. However, scp2 recognizes      from the "-t" flag what's expected, and tries exec scp1 to service the connection (this is the extent      of SSH2's SSH-1 compatibility; where OpenSSH has code for both protocols in a single set of programs,      SSH2 expects to execute programs from a parallel SSH1 installation). It fails (presumably because      you don't have SSH1 installed), and reports the problem. The solution is to install either the OpenSSH or SSH1 version of scp on the server under the name "scp1", somewhere in the sshd2's PATH. Quote 2: OpenSSH implements "scp" via RCP over an SSH channel. ssh.com implement "scp" via FTP over an SSH channel. OpenSSH's server has both implementations, but it's client only uses the RCP version. So if the client is OpenSSH, use "sftp" to get to an ssh.com server. 上述情況發生的場景一般是openssh作為client,要連線一個ssh2都server, 如果上述兩種解決方案都覺得麻煩的話,可以通過tar來繞過這個問題: scp2() { tar cf - -C $(dirname $1) $(basename $1) | ssh [email protected]_ip -- "tar xmf - -C $2" } scp2r () { ssh [email protected]_ip -- "tar cf - -C $(dirname $1) $(basename $1)" | tar xmf - -C ${2:-.}; }

相關推薦

sshssh2之間密碼登陸

SSH為Secure Shell的縮寫,由IETF的網路工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協議。在維基百科上,有關於SSH的詳細詞條,但通俗點說,SSH能夠讓一個客戶端安全的登入上一個伺服器上進行管理操作。所以,忘掉FTP、POP和Tel

ubuntu16.04叢集之間配置SSH密碼登陸與原理

環境 vmware14.1虛擬機器中三臺ubuntu16.04 ip地址對映關係:如下 127.0.0.1 localhost 192.168.184.131 vm-01 192.168.184.132 vm-02 192.168.184.133

一臺Linux電腦連線另一臺Linux(SSH實現linux之間密碼登陸)

首先檢視是否安裝ssh服務:systemctl status sshd.service    啟動服務:systemctl start sshd.service    重啟服務:systemctl restart sshd.service    開機自啟:systemctl

SSH通訊密碼登陸設定

1.SSH原理 SSH 為 Secure Shell 的縮寫,安全Shell網路協議,用於計算機之間的加密登入,早期的計算機之間採用明文通訊,通訊訊號被截獲以後,內容即被截獲一方掌握。1995年,芬蘭學者Tatu Ylonen設計了SSH協議對登陸資訊進行加密

Jenkins進階系列之——09配置Linux系統ssh密碼登陸

dom pub tar finger cnblogs pan 改變 art home ssh認證的完整描述:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ 說明:點我去查看 今天我們只說

ssh 密碼登陸

密碼 有時 刪除 內容 需要 機器 文檔 authorize 利用 服務器被登陸的時候,需要用戶提供它的密碼。 ssh [email protected]/* */ 有時人們會覺得輸入密碼比較麻煩。有時服務器是不想讓人直接登陸,但是又必須允許部分人登

配置ssh密碼登陸

grep 本機 author ins 配置ssh 數據同步 輸入 如果 id_rsa 以root賬戶為例 準備兩臺以上的Linux服務器,我這裏用的是s204,s205兩臺機器,多臺同樣的 先使用ssh登錄試一下,如果沒有安裝則需要先安裝一下 ssh s205會提示你輸

Mac客戶端CentOS服務器 SSH密碼登陸

rsa 使用 直接 oot root 下使用 bsp 密碼 cat 假定有2個服務器A(127.0.0.1)和B(192.168.0.1),A作為客戶端來登錄服務器B 1.在服務器A下使用 ssh-keygen -t ras -P ‘  會在~/.ssh目錄下‘生成公鑰(

Centos7 ssh密碼登陸

gpo id_rsa ssh免密 evel 密鑰登陸 post pan png ssh-key 摘要:安裝openssl openssl-devel 不過有些centos自帶 192.168.161.5 192.168.161.15 本版本用centos7 (192.16

Linux上實現ssh密碼登陸遠程服務器

Linux上實現ssh免密碼登陸遠程服務平常使用ssh登陸遠程服務器時,都需要使用輸入密碼,希望可以實現通過密鑰登陸而免除輸入密碼,從而可以為以後實現批量自動部署主機做好準備。 環境如下: IP地址 操作系統 服務器端 10.0.0.10 CentOS 6.5 x86 客戶端 10.0.0

ssh密碼登陸設置時bad ownership or modes for file 報錯的解決辦法

linux ssh問題:密鑰登陸時報如下錯誤:May 13 10:11:26 keep sshd[25103]: Authentication refused: bad ownership or modes for file /home/git/.ssh/authorized_keys 原因:sshd為了安全

centos ssh密碼登陸突然

終端輸入:tail /var/log/secure -n 20 發現有下面這樣一句話: Oct 16 19:52:03 master sshd[4463]: Authentication refused: bad ownership or modes for directory /roo

宿主機與docker容器之間密碼ssh連結,容器與容器之間ssh密碼連線

轉:https://segmentfault.com/a/1190000012484646 若要實現免密登陸,意味著無論是宿主機,還是容器都要彼此互動公鑰: 容器A傳送自身公鑰給中心機器,統一由中心機器,回發全部需要ssh到容器A的公鑰資訊,任何一個新加入的容器,傳送資訊給中心機器,則中心機

阿里雲3臺機器組成叢集配置ssh密碼登陸

1 查詢阿里雲局網ip 注意:需要配置同一地區同一可用區的機器 才是一個局網 2 配置好hosts檔案 3 hostname確認也是正確的 4 生成公鑰私鑰 三臺機器同樣操作  ssh-keygen -t rsa     然後一路回車 &n

使用expect實現ssh密碼登陸

使用expect向ip列表檔案中的ip主機,執行ssh-copy-id命令複製金鑰,以實現ssh免密登陸。 安裝expect yum install -y expect 生成金鑰對 ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 指令碼 //shell指令碼內容

多臺虛擬機器之間實現密碼登陸

多臺虛擬機器之間實現免密碼登陸 過程分析 1 虛擬機器生成金鑰 本文以node01,node02兩臺虛擬機器做示範 生成金鑰 ssh-keygen -t rsa 回車三次 2. 檢視生成公鑰: 1.r

Linux登陸設定了登陸還需要輸入密碼

   一、Linux的免密登陸:             ssh-keygen -t rsa         ssh-copy-id -i ~/.ssh/id_rsa.pub 目標機器ip地址/主機名      驗證是否成功:ssh 目標機器      如果不需要輸入密碼了

ssh 密碼登陸設定不成功

記一次centos6設定免密碼登陸設定不成功的解決。自己挖的坑自己填。 ssh 免密碼登陸設定( 正常情況下是這樣的,設定成功後登陸主機是不需要密碼的) [[email protected] .ssh]# ssh-keygen -t rsa # 執行上面的命令直接敲3-4次回車。 Gener

ssh localhost 密碼登陸(圖解)

每次搞ssh locahost無密碼登陸都要查半天,這次記錄一下,以備不時之需 假設系統中有使用者test,屬於使用者組test, 1 首先確認能否不輸入口令就用ssh登入localhost: $ ssh localhost 輸出如下所示: 2

ssh配置密碼登陸時的許可權問題

ssh在配置免密碼登陸時,需要將登入放的公鑰放到authorized_keys中,但是有時即使填寫了也無法免密碼登陸,此時可以考慮檢視各個檔案的許可權是否正確了。 1. authorized_keys