UNIX SSH SCP

2018-11-24 15:13 更新

Public key authentication

使用公鑰認(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 的 Windows 客戶端

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)換公鑰:

     cd ~/.ssh

     ssh-keygen -i -f keyfilename.pub >> authorized_keys2

注意: 我們使用 DSA 密鑰,使用 RSA 密鑰也是可以的。這個密鑰不受密碼保護。

在 Windows 上使用 Putty

Putty 是一個簡單并且自由的(MIT許可) ssh Windows 客戶端。

  • 使用 puTTYgen 程序創(chuàng)建密鑰對。

  • 保存密鑰對(比如:C:\Documents and Settings\%USERNAME%.ssh).

  • 拷貝公鑰到服務(wù)器的 ~/.ssh 目錄:
# scp .ssh/puttykey.pub root@192.168.51.254:.ssh/
  • 使用 ssh-keygen 在 OpenSSH 服務(wù)器上轉(zhuǎn)換這個公鑰:
    # cd ~/.ssh
    # ssh-keygen -i -f puttykey.pub >> authorized_keys2
  • 在 Putty 中設(shè)置指向私鑰的位置:Connection - SSH - Auth

檢查指紋

在首次連接時,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.

隧道(Tunneling)

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ā)。

在 gate 上直接轉(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

轉(zhuǎn)發(fā) Netbios 和遠程桌面到第二個服務(wù)器

假設(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 連接遠程桌面。

調(diào)試

如果不能工作:

  • 端口有沒有轉(zhuǎn)發(fā):運行控制臺運行 netstat -an 命令并查看有沒有 0.0.0.0:139 或者 10.1.1.1:139

  • 有沒有 telnet 到 10.1.1.1 139?

  • 你需要打開 "本地端口接受其他主機連接"。

  • "Microsoft 網(wǎng)絡(luò)文件和打印機共享" 有沒有被禁用?

在 NAT 后面連接兩個客戶端

假設(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

在 NAT 后面的 VNC 連接

假設(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
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號