OpenSSH SSH 連線

在以往使用 telnet 連線時,在通訊過程中所傳的所以資訊都可以被有心人士監聽,因此出現了 SSH (Secure SHell protocol) 通訊協定,而 OpenSSH 則是支援 SSH 的一套工具軟體。

.OpenSSH 取代了一般較不安全的網路通訊應用程式。

.提供了使用者及密碼驗證方式(token-based authentication)。

.能建立加密安全通道讓不安全的通訊使用。

.基本設定檔放在 /etd/ssh 底下。

=========================================

OpenSSH 除了讓使用者有安全的通訊協定之外,還提供了遠端登入、遠端傳遞檔案、遠端執行命令、以及為 rsync 和 rdist 提供安全通道等,要使用 OpenSSH ,至少需安裝 openssh、openssl、openssh-clients 三個套件,如果有安裝 X window 介面,則須另外加 openssh-askpass、openssh-askpass-gnome 套件,如果要當作 SSH Server 來用,那就一定要安裝 openssh-server 套件了。各個套件提供的功能如下:

.openssh:ssh-keygen, scp

.openssl:cryptographic libraries 以及一些 openssh 平常需要的加密函式庫

.openssh-clients:ssh, slogin, ssh-agent, ssh-add, sftp

.openssh-server:sshd

.openssh-askpass:X11 passphrase dialog

.openssh-askpass-gnome:GNOME passphrase dialog

=========================================

SSH Clients 使用方式

一、登入遠端主機:

# ssh 192.168.0.1
以目前的帳號登入 192.168.0.1 這臺主機
# ssh kevin@192.168.0.1
以帳號 kevin 登入 192.168.0.1 這臺主機
# ssh 192.168.0.1 “ls -al”
以目前的帳號在 192.168.0.1 這臺主機執行 ls -al 的命令

二、遠端複製檔案

# scp 192.168.0.1:/etc/passwd /tmp
將 192.168.0.1 這臺主機上 /etc/passwd 這個檔案複製到本機的 /tmp 目錄之下

# scp -r 192.168.0.1:/etc .
將 192.168.0.1 這臺主機上的 /etc 整個目錄複製到本機的當前目錄下

# scp /etc/passwd 192.168.0.1:/tmp
將本機的 /etc/passwd 這個檔案製複到 192.168.0.1 這臺主機的 /tmp 目錄之下

# scp -r /etc kevin@192.168.0.1:~
將本機的 /etc 目錄以 kevin 的身份複製到 192.168.0.1 這臺主機的家目錄之下

三、sftp

sftp 也是複製遠端檔案用的,差別在於 sftp 是互動式的,可以瀏覽遠端的目錄及檔案,然後再下載想要的檔案或目錄,而 scp 則是給予很明確路徑並複製到指定的地方,檔命令執行完成後即斷線。

sftp 的使用方式和一般 ftp 的使用方式一樣。

=========================================

OpenSSH 驗證方式

SSHD 提供了多樣化的驗證方式:

.帳號密碼驗證

.RSA 或 DSA 金鑰 (每個使用者都可以產生自己的金鑰對)

.Kerberos

.s/key 與 SecureID

.使用系統金鑰對進行主機驗證 (兩臺主機都是 root 才有權限使用)

RSA 或 DSA 金鑰驗證方式

當使用排程執行 Shell Scripts 要將遠端主機的檔案進行備份,或是執行其他工作時,總不可能每次 ssh 或 scp 連線時都跑到排程主機上輸入密碼,這時 sshd 的金鑰對驗證方式就發揮了它的強大作用。

使用流程:

產生金鑰對 --> 將公開金鑰複製到遠端主機 --> 以開金鑰更名為 authorized_keys (這個名稱可以在 sshd_config 中更改)

# ssh-keygen -t rsa (產生 RSA 金鑰對)
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):       (放在預設目錄就好了,所以按 Enter)
Enter passphrase (empty for no passphrase):       (要不要對私密金鑰作密碼保護,因為就是不要輸入密碼,所以按 Enter)
Enter same passphrase again:       (再按一次 Enter)
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:
e8:99:5d:7a:12:86:fd:24:68:5e:87:8e:19:e6 root@ishm      (金鑰的 fingerprint)

# ssh-keygen -t dsa (產生 DSA 金鑰對,RSA 和 DSA 是不同加密方式,用途是一樣的,產生一對即可)
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):       (放在預設目錄就好了,所以按 Enter)
Enter passphrase (empty for no passphrase):       (要不要對私密金鑰作密碼保護,因為就是不要輸入密碼,所以按 Enter)
Enter same passphrase again:       (再按一次 Enter)
Your identification has been saved in /root/.ssh/id_dsa.      (金鑰放在這裡)
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
d6:fe:6b:b5:c0:15:72:5b:34:4b:83:71:fa:1e root@ishm      (金鑰的 fingerprint)

# ls -al /root/.ssh (看一下金鑰所在的目錄)
總計 56
drwx——  2 root root 4096  3月 22 12:15 .
drwxr-x— 34 root root 4096  3月 20 23:49 ..
-rw——-  1 root root  672  3月 22 12:15 id_dsa
-rw-r–r–  1 root root  605  3月 22 12:15 id_dsa.pub      (DSA 的公開金鑰)
-rw——-  1 root root 1675  3月 22 12:15 id_rsa
-rw-r–r–  1 root root  397  3月 22 12:15 id_rsa.pub      (RSA 的公開金鑰)
-rw-r–r–  1 root root 1200  3月 19 23:30 known_hosts

接下來將其中一把公開金鑰複製到遠端主機的特定目錄(看是要使用那個帳號登入)並改名成 authorized_keys,記得遠端的 .ssh 目錄的權限必須是 700 (drwx——)

# scp /root/.ssh/id_rsa.pub root@ishm.idv.tw:~/.ssh/authorized_keys (檔案傳輸過去後直接改名)
root@ishm.idv.tw’s password:       (輸入使用者密碼)
id_rsa.pub                                    100%  397     0.4KB/s   00:00
# ssh root@ishm.idv.tw (ssh 連線一次看看)
Last login: Sun Mar 22 12:40:17 2009 from x.x.x.x
[root@ishm.idv.tw ~]# (沒有問帳號密碼就可以登入)

這時就可以使用遠端執行命令或遠端傳輸檔案,且毋需密碼。

另一種將 Public Key 傳送到伺服器的方式是:

先產生兩對金鑰

#ssh-keygen -t dsa

#ssh-keygen -t dsa

再為系統加入這兩對金鑰的 identity

#ssh-add

然後將金鑰傳送到遠端伺服器

#ssh-copy-id user@host

它就會自動尋找本機使用者的 Public Key,再將它複製到 host 的 user 家目錄中 .ssh 的子目錄下,且自動附加到 authorized_keys 的檔案中。但是,比較舊的系統可能不支援。