使用公鑰認(rèn)證而不是密碼連接主機。方法是附加你的公鑰文件到遠程主機。本例中我們用客戶端產(chǎn)生的 key 從 host-client 連接到 host-server。
使用 ssh-keygen 生成密鑰對。私鑰放在 ~/.ssh/id_dsa
,公鑰在 ~/.ssh/id_dsa.pub
。
拷貝你的公鑰到服務(wù)器的 ~/.ssh/authorized_keys2
。
# ssh-keygen -t dsa -N ''
# cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2"
ssh.com 的非商業(yè)性版本的客戶端可下載自它主 FTP 站點:ftp.ssh.com/pub/ssh/。 用 ssh.com 客戶端產(chǎn)生的密鑰需要在 OpenSSH 服務(wù)器上進行轉(zhuǎn)換??梢允褂?ssh-keygen 命令來完成。
使用 ssh.com 客戶端創(chuàng)建一對密鑰:Settings - User Authentication - Generate New....
我使用 DSA 密鑰類型;密鑰長度為 2048。
拷貝 ssh.com 客戶端產(chǎn)生的公鑰到服務(wù)器的 ~/.ssh 目錄。
她的密鑰對在 C:\Documents and Settings\%USERNAME%\Application Data\SSH\UserKeys。
在服務(wù)器上使用 ssh-keygen 轉(zhuǎn)換公鑰:
注意: 我們使用 DSA 密鑰,使用 RSA 密鑰也是可以的。這個密鑰不受密碼保護。
Putty 是一個簡單并且自由的(MIT許可) ssh Windows 客戶端。
使用 puTTYgen 程序創(chuàng)建密鑰對。
保存密鑰對(比如:C:\Documents and Settings\%USERNAME%.ssh).
# scp .ssh/puttykey.pub root@192.168.51.254:.ssh/
# cd ~/.ssh
# ssh-keygen -i -f puttykey.pub >> authorized_keys2
在首次連接時,SSH 會請求保存不知道的主機指紋。要避免中間人(man-in-the-middle)攻擊,服務(wù)器的管理員可以發(fā)送密鑰指紋給客戶端,來讓其在首次登陸時驗證服務(wù)器的真實性。使用 ssh-keygen -l
獲取服務(wù)器的指紋:
# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub # RSA 密鑰
2048 61:33:be:9b:ae:6c:36:31:fd:83:98:b7:99:2d:9f:cd /etc/ssh/ssh_host_rsa_key.pub
# ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub # DSA 密鑰(默認(rèn))
2048 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee /etc/ssh/ssh_host_dsa_key.pub
現(xiàn)在客戶端在連接到服務(wù)器時可驗證其服務(wù)器的真實性:
# ssh linda
The authenticity of host 'linda (192.168.16.54)' can't be established.
DSA key fingerprint is 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee.
Are you sure you want to continue connecting (yes/no)? yes
一些簡單的命令:
# scp file.txt host-two:/tmp
# scp joe@host-two:/www/*.html /www/tmp
# scp -r joe@host-two:/www /www/tmp
在 Konqueror 或 Midnight 控制臺中,用地址 fish://user@gate 來訪問遠程文件系統(tǒng)是可行的,就是比較慢而已。
此外,也可以用基于 SCP 文件系統(tǒng)客戶端的 sshfs 來掛載一個遠程目錄。看 fuse sshfs.
SSH 隧道可以讓你通過 SSH 連接進行端口轉(zhuǎn)發(fā)(轉(zhuǎn)發(fā)/反向隧道),從而確保了傳輸及端口訪問的安全。它只能工作在 TCP 協(xié)議上。通常端口轉(zhuǎn)發(fā)命令如下(也可看 ssh 和 NAT 實例):
# ssh -L localport:desthost:destport user@gate # gate 為目標(biāo)主機網(wǎng)關(guān)
# ssh -R destport:desthost:localport user@gate # 轉(zhuǎn)發(fā)你的 localport 到目標(biāo)端口
# ssh -X user@gate # 轉(zhuǎn)發(fā) X 程序
這將會連接到 gate 并轉(zhuǎn)發(fā)端口到目標(biāo)主機 desthost:destport。注意 desthost 為 gate 中的目標(biāo)主機名。因此,如果連接到了 gate,那么 desthost 就是 localhost。也可以做更多的端口轉(zhuǎn)發(fā)。
假設(shè)我們想訪問在 gate 上運行的 CVS(2401端口) 和 HTTP(80端口)。下面是個簡單的例子,desthost 就是 localhost,我們使用本的端口 8080 代替 80 端口,所以我們不需要 root 權(quán)限。一旦 ssh session 打開,二個服務(wù)就都可在本地端口訪問。
# ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate
假設(shè)有一臺在 gate 后面沒有運行 ssh 的 Winodws SMB 服務(wù)器。我們需要訪問 SMB 共享和遠程桌面。
# ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gate
現(xiàn)在這個 SMB 共享可以使用 \127.0.0.1\ 訪問,但只能在本地共享關(guān)閉的情況下,因為本的共享也是在 139 端口監(jiān)聽的。
保持本的共享也是可行的,因此我們需要為這個通道使用新 IP 地址來新建一個虛擬設(shè)備,SMB 共享將會使用此地址連接。此外,本地 RDP 已經(jīng)在 3389 端口監(jiān)聽了,所以我們選擇端口 3388。對于這個例子,讓我們使用一個虛擬 IP 地址 10.1.1.1。
對于 Putty 上使用源端口=10.1.1.1:139。它可以創(chuàng)建多重回路(multiple loop)設(shè)備和通道。在 Windows 2000 上,只有 Putty 為我工作。
對于 ssh.com 的客戶端,要禁用 "Allow local connections only"。因為 ssh.com 客戶端綁定了所有地址,所以只能連接單個共享。
現(xiàn)在用 IP 地址 10.1.1.1 創(chuàng)建回路(loopback)接口:
- # 系統(tǒng)->控制面板->添加硬件 # 是,我已經(jīng)連接了此硬件(Y) # 添加新的硬件設(shè)備(在列表最下面)。
- # 安裝我手動選擇的硬件 # 網(wǎng)絡(luò)適配器 # Microsoft , Microsoft Loopback Adapter。
- 配置這個假設(shè)備的 IP 地址為 10.1.1.1,掩碼 255.255.255.0,沒有網(wǎng)關(guān)。
- 高級->WINS,開啟 LMHOSTS 查詢;禁用 TCP/IP 上的 NetBIOS。
- # 啟用 Microsoft 網(wǎng)絡(luò)客戶端。# 禁用 Microsoft 網(wǎng)絡(luò)文件和打印機共享
做完這些之后我有重啟?,F(xiàn)在用 \10.1.1.1 連接 SMB 共享和用 10.1.1.1:3388 連接遠程桌面。
如果不能工作:
端口有沒有轉(zhuǎn)發(fā):運行控制臺運行 netstat -an 命令并查看有沒有 0.0.0.0:139 或者 10.1.1.1:139
有沒有 telnet 到 10.1.1.1 139?
你需要打開 "本地端口接受其他主機連接"。
假設(shè)兩個客戶端在一個 NAT 網(wǎng)關(guān)后面,cliadmin 客戶端要連接到 cliuser 客戶端(目的地),兩者都可用 ssh 登錄到正在運行 sshd 的 gate 上。你不需要 root 權(quán)限,只要端口大于 1024 即可。我們在 gate 上使用 2022 端口。而且,由于 gate 使用與本地,所以網(wǎng)關(guān)端口不是必須的。
開啟 cliuser 客戶端(從目標(biāo)到 gate):
# ssh -R 2022:localhost:22 user@gate # 轉(zhuǎn)發(fā)客戶端 22 端口到 gate:2022 端口
開啟 cliadmin 客戶端(從主機到 gate):
# ssh -L 3022:localhost:2022 admin@gate # 轉(zhuǎn)發(fā)客戶端 3022 端口到 gate:2022 端口
現(xiàn)在 admin 可以直接連接 cliuser 客戶端:
# ssh -p 3022 admin@localhost # local:3022 -> gate:2022 -> client:22
假設(shè)一個在 NAT 后面,監(jiān)聽在端口 5900 上可被訪問的 Windows VNC 客戶端。
開啟 cliwin 客戶端到 gate:
# ssh -R 15900:localhost:5900 user@gate
開啟 cliadmin 客戶端(從主機到 gate):
# ssh -L 5900:localhost:15900 admin@gate
現(xiàn)在 admin 直接連接到 VNC 客戶端:
# vncconnect -display :0 localhost
更多建議: