首頁 > 軟體

Linux遠端連線工具-OpenSSH

2020-06-16 18:00:13

在我們日常管理與維護伺服器個過程中,我們都需要使用遠端連線工具,今天我們就一同來總結下Linux常用的安全遠端連線工具-OpenSSH。

【遠端登入協定】

1、telnet:是TCP/IP協定族中的一員,是Internet遠端登陸服務的標準協定和主要方式。它為使用者提供了在本地計算機上完成遠端主機工作的能力。預設使用的是TCP的23號埠,採用C/S架構,在使用者登入的過程中傳輸的資訊都是明文資訊,安全無法保障,所以不建議用telnet。

2、ssh:為Secure Shell 的縮寫,由IETF的網路工作小組所制定;SSH 為建立在應用層和傳輸層基礎上的安全協定。SSH是目前較可靠,專為遠端登入對談和其他網路服務提供安全性的協定。利用 SSH 協定可以有效防止遠端管理過程中的資訊洩露問題。預設使用的是TCP的22號埠,也是基於C/S架構,SSH有兩個版本v1與v2。

sshv1:基於CRC-32做MAC(訊息摘要認證),不安全,強烈建議不使用;

sshv2:基於雙方主機的協商選擇使用最安全的MAC方式 ,其有如下特點:1、加密機制及MAC機制由雙方協商選定;2、基於DH實現金鑰交換,基於RSA或DSA實現身份認證;3、用戶端通過檢查伺服器端的主機金鑰來判斷是否能夠繼續通訊;

【OpenSSH簡述】

OpenSSH 是一組用於安全地存取遠端計算機的連線工具。它可以作為rlogin、rsh rcp以及telnet的直接替代品使用。更進一步,其他任何TCP/IP連線都可以通過SSH安全地進行隧道/轉發。OpenSSH 對所有的傳輸進行加密,從而有效地阻止了竊聽、連線劫持,以及其他網路級的攻擊。OpenSSH 由 OpenBSD project 維護。

登入過程和使用rlogin或telnet建立的對談非常類似。在連線時,SSH 會利用一個金鑰指紋系統來驗證伺服器的真實性。只有在第一次連線時,使用者會被要求輸入yes進行確認,之後的連線將會驗證預先儲存下來的金鑰指紋。如果儲存的指紋與登入時接收到的不符, 則將會給出警告。 指紋儲存在 ~/.ssh/known_hosts中,對於SSHv2指紋,則是 ~/.ssh/known_hosts2。

預設情況下,較新版本的OpenSSH只接受SSHv2連線。如果能用版本2則客戶程式會自動使用,否則它會返回使用版本1的模式。此外,也可以通過命令列引數-1或-2來相應地強制使用版本1或2。 保持用戶端的版本1能力是為了考慮較早版本的相容性,建議盡量使用版本2。

【SSH伺服器和用戶端工作流程】

OpenSSH使用C/S架構:

伺服器端工具(S):sshd

用戶端工具(C):ssh命令、putty、xshell、securecrt、sshshellclient;

【OpenSSH用戶端元件-ssh】

    設定文字:/etc/ssh/ssh_config
    使用方法:
    ssh [username@] host [COMMAND]或 ssh -l username host [COMMAND]
        -p PORT:指定遠端伺服器埠;
        -l username:指定登入遠端主機的使用者,不指定則使用當前使用者;
        username@:等同於 -l username;
        如果設定了COMMAND,表示使用username賬戶登入遠端主機執行一次指定的命令並返回結果,不會停留在遠端主機上;
[root@www ~]# ssh 192.168.0.110 #使用root使用者登入;
The authenticity of host '192.168.0.110 (192.168.0.110)' can't be established.
RSA key fingerprint is 01:2e:43:cc:bc:1d:f1:e5:f0:f4:89:78:74:a9:49:44.
Are you sure you want to continue connecting (yes/no)? yes #第一次連線,需手動進行確認;
Warning: Permanently added '192.168.0.110' (RSA) to the list of known hosts.
root@192.168.0.110's password: #輸入遠端主機root賬戶的密碼;
Last login: Mon May 11 16:44:52 2015 from 192.168.0.104
[root@mailCentOS6 ~]#  #登入成功了,遠端主機名為mailCentOS6;
[root@mailCentOS6 ~]# ls #顯示遠端主機root家目錄下的檔案;
2.sh            boot.iso  install.log        sdb.mbr    test1
anaconda-ks.cfg  crontab  install.log.syslog  temptest
[root@mailCentOS6 ~]# exit #退出登入;
logout
Connection to 192.168.0.110 closed.
[root@www ~]# ssh root@192.168.0.110 ls #使用root登入遠端主機,執行一次ls命令,返回結果便退出;
root@192.168.0.110's password: #第二次連線,就不需要輸入yes了,直接輸入密碼即可;
2.sh
anaconda-ks.cfg
boot.iso
crontab
install.log
install.log.syslog
sdb.mbr
temptest
test1
[root@www ~]#  #看到了嗎,我們當前並沒有登入在遠端主機;

【OpenSSH伺服器端元件-sshd】
    組態檔:/etc/ssh/sshd_config(通過修改此檔案可以修改ssh的預設監聽埠與其他引數)
    服務指令碼:/etc/rc.d/init.d/sshd 
        服務啟動|停止|重新啟動:serveice sshd start|stop|restart
    指令碼組態檔:/etc/sysconfig/sshd

    設定引數
# man sshd_config  檢視設定引數的說明;
        # vim /etc/sysconfig/sshd  通過編輯組態檔來修改設定引數;
          #+空格+文字:以此格式開頭的行表示改行為註釋說明;
          #+文字:以此格式開頭的行表示可啟用選項,不改變則表示使用該選項的預設設定,反之使用設定值“#”要去掉哦!
            例:#Port 22 如不去掉#且22不變,表示使用預設的22號埠;
                若把#Port 22改成port 7777,表示把sshd的監聽埠改成7777;
        注意:修改引數與設定後,必須重新啟動服務(service sshd restart).
  經常需要修改的引數:
[root@www ~]# cat /etc/ssh/sshd_config
#  $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
 
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
 
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
 
#Port 22  #修改預設監聽的埠;
port 7777 #把sshd的監聽埠改成7777;
#AddressFamily any  #監聽的地址家族,指定是監聽在IPV4上還是IPV6上,any表示所有;
#ListenAddress 0.0.0.0  #指定監聽的地址 (0.0.0.0表示本機的所有地址);
#ListenAddress :: 
 
# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2
 
# HostKey for protocol version 1 
#HostKey /etc/ssh/ssh_host_key #使用shhv1用到的主機金鑰;
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
 
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024 #金鑰長度;
 
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
 
# Authentication:
 
#LoginGraceTime 2m #登入寬限期;
#PermitRootLogin yes #是否允許管理員直接登入;
#StrictModes yes
#MaxAuthTries 6 #最大密碼輸入錯誤次數;
#MaxSessions 10 #最大對談個數;
 
#RSAAuthentication yes  #是否允許使用RSA機制來認證;
#PubkeyAuthentication yes
#--------中間不長改變的設定引數略----------
 
Subsystem  sftp    /usr/libexec/openssh/sftp-server  #表示是否啟動sftp功能;
 
# Example of overriding settings on a per-user basis
#Match User anoncvs
#  X11Forwarding no
#  AllowTcpForwarding no
#  ForceCommand cvs server

  sshd認證方式:
      1、基於口令的認證;
      2、基於金鑰的認證;
        # ssh-keygen -t rsa  用rsa演算法生成金鑰,預設金鑰為id_rsa(私鑰), id_rsa.pub(公鑰)
        # ssh-keygen -f /path/to/somefile -P oldpassword 根據現有的金鑰檔案生成金鑰
            -f /path/to/somefile: 金鑰檔案儲存在的位置;
            -P '': 指定生成舊金鑰時使用的密碼;
          方法一:把本地主機生成的公鑰 id_rsa.pub使用scp複製到遠端主機的上,在遠端主機使用cat id_rsa.pub>>.ssh/authorized_keys追加該公鑰資訊,這樣就可以實現基於金鑰認證的ssh登入;
          方法二:# ssh-copy-id -i .ssh/id_rsa.pub USERNAME@HOST
[root@www ~]# ssh-keygen -t rsa #用rsa演算法生成金鑰;
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #指定金鑰存放路徑及名稱,一般不用
#修改,直接回車;
Enter passphrase (empty for no passphrase):  #輸入私鑰密碼;
Enter same passphrase again:  #確認輸入私鑰密碼;
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c2:f9:c2:3d:4d:ca:52:39:7a:a7:33:de:42:11:d3:8f root@www.99.com
The key's randomart image is:
+--[ RSA 2048]----+
|        .      |
|        o .      |
|        o o    |
|    . ...E .    |
|      + S..      |
|    . B.=      |
|      =.B o      |
|      ++=      |
|      .o+.      |
+-----------------+
[root@www ~]# ssh-keygen -f  .ssh/id_rsa -P '' #根據現有金鑰檔案重新生成金鑰;
Generating public/private rsa key pair.
.ssh/id_rsa already exists.
Overwrite (y/n)? y #提示是否確定要覆蓋;
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
bf:55:f0:0b:a5:ee:4e:4a:1d:d3:b1:0e:66:ee:55:9b root@www.99.com
The key's randomart image is:
+--[ RSA 2048]----+
|                |
|                |
|            . o  |
|            * o |
|        S  O = .|
|        . * B oo|
|          o * +E |
|        . B .  |
|          o.+    |
+-----------------+
#-----使用方法一:實現通過金鑰檔案完成身份驗證(不需要輸入密碼)-----
[root@www ~]# scp .ssh/id_rsa.pub root@192.168.0.110:/root/ #使用spc命令複製公鑰檔案到遠端
#主機的使用者家目錄下的.ss/路徑下;
root@192.168.0.110's password: #輸入登入遠端主機的密碼;
id_rsa.pub                          100%  397    0.4KB/s  00:00 #提示複製成功;
[root@mailCentOS6 ~]# ls .ssh/ #驗證確認檔案複製成功;
id_rsa.pub  known_hosts
[root@mailCentOS6 ~]# touch .ssh/authorized_keys #路徑內沒有自動驗證金鑰檔案,建立一個;
[root@mailCentOS6 ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys #把公鑰追加到自動驗證金鑰檔案;
[root@www ~]# ssh 192.168.0.110
Last login: Mon May 11 20:45:10 2015 from 192.168.0.111
[root@mailCentOS6 ~]# #OK了,看到了沒有,不用輸入密碼我們就直接可以遠端登入了!!
 
#-----使用方法二:實現通過金鑰檔案完成身份驗證(不需要輸入密碼)-----
[root@mailCentOS6 ~]# rm -f .ssh/authorized_keys  #刪除原有儲存的自動驗證金鑰檔案;
[root@www ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.110 #使用命令自動傳輸生成自動驗證金鑰檔案;
root@192.168.0.110's password: 
Now try logging into the machine, with "ssh 'root@192.168.0.110'", and check in:
 
  .ssh/authorized_keys #提示生成的檔案;
 
to make sure we haven't added extra keys that you weren't expecting.
 
[root@www ~]# ssh 192.168.0.110 #驗證看看是否可以登入;
Last login: Mon May 11 21:02:29 2015 from 192.168.0.111
[root@mailCentOS6 ~]# ls .ssh/  #看到了沒有,我們現在已經登入到了mailCentOS6這台主機上了;
authorized_keys  known_hosts

【命令補充】

    scp: 利用ssh協定在主機之間實現安全檔案傳輸的工具
      scp SRC1... DEST
      分兩種情形:
          1、原始檔在本機,目標為遠端主機
            # scp /path/to/somefile... USERNAME@HOST:/path/to/somewhere
            源可以是目錄或檔案有多個,目標必須是目錄
        2、原始檔在遠端,本地為目標
            # scp USERNAME@HOST:/path/to/somewhere /path/to/somewhere
                               
            -r: 複製目錄時使用(實現遞回複製),scp預設不能複製目錄;
            -p: 保持原始檔的後設資料資訊,包括mode和timestamp
            -q: 靜默模式,複製過程不顯示狀態資訊;
            -p PORT: 指定ssh協定監聽的埠(遠端主機)。

--------------------------------------------------------------------------------
好了,大概就總結說明這些了,如有不盡之處,還請各位大神海涵,歡迎拍磚~!!~

Ubuntu Server 13.10系統中安裝設定OpenSSH http://www.linuxidc.com/Linux/2014-02/96953.htm

Ubuntu安裝遠端登入OpenSSH服務 http://www.linuxidc.com/Linux/2014-02/97218.htm

通過OpenSSH遠端登入時的延遲問題解決 http://www.linuxidc.com/Linux/2013-07/86879.htm

Ubuntu 12.10下OpenSSH的離線安裝方法 http://www.linuxidc.com/Linux/2013-04/82814.htm

OpenSSH升級步驟及注意事項詳解 http://www.linuxidc.com/Linux/2013-04/82123.htm

OpenSSH普通使用者無法登入的幾種情況的解決方法 http://www.linuxidc.com/Linux/2012-05/59457.htm

通用執行緒: OpenSSH 金鑰管理,第 1 部分理解 RSA/DSA 認證 http://www.linuxidc.com/Linux/2011-08/39871.htm

RedHat安裝OpenSSH和設定sftp鎖定目錄 http://www.linuxidc.com/Linux/2012-12/75398.htm


IT145.com E-mail:sddin#qq.com