OpenSSH是SSH連接工具的免費版本离熏。telnet夯接,rlogin和ftp用戶可能還沒意識到他們在互聯(lián)網(wǎng)上傳輸?shù)拿艽a是未加密的煤篙,但SSH是加密的嘴瓤,OpenSSH加密所有通信(包括密碼),有效消除了竊聽轴猎,連接劫持和其它攻擊嵌莉。此外,OpenSSH提供了安全隧道功能和多種身份驗證方法捻脖,支持SSH協(xié)議的所有版本锐峭。
SSH是一個非常偉大的工具,如果你要在互聯(lián)網(wǎng)上遠程連接到服務(wù)器可婶,那么SSH無疑是最佳的候選沿癞。
一.SSH基礎(chǔ)命令
1.SSH遠程登錄
假定你要以用戶名root,登錄遠程主機192.168.1.104
1.1.口令登錄
需要輸入密碼
# 常用用法
ssh root@192.168.1.104
# 本地用戶名與遠程用戶名一致扰肌,登錄時可以省略用戶名
ssh 192.168.1.104
# SSH的默認(rèn)端口是22,使用p參數(shù)抛寝,可以修改這個端口
ssh -p 2222 root@192.168.1.104
1.2.公鑰登錄
# 生成秘鑰和公鑰
ssh-keygen
# 將公鑰傳送到遠程主機host上
# 方法一
ssh-copy-id root@192.168.1.104
# 方法二
ssh root@192.168.1.104 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys' << ~/.ssh/id_rsa.pub
2.通過中間主機建立SSH連
# 直接連接到只能通過 hostA 連接的 hostB
# hostB 表示從本地網(wǎng)絡(luò)無法直接訪問的主機,但可以從 hostA 所在網(wǎng)絡(luò)訪問
# 這個命令通過到 hostA 的“隱藏”連接曙旭,創(chuàng)建起到 hostB 的連接
ssh -t hostA ssh hostB
3.通過SSH連接屏幕
# 直接連接到遠程屏幕會話(節(jié)省了無用的父bash進程)
ssh -t root@192.168.1.104 screen –r
# 建立一個可以重新連接的遠程GNU screen
ssh -t root@192.168.1.104 screen –xRR
二.SSH遠程操作
SSH不僅可以用于遠程主機登錄盗舰,還可以直接在遠程主機上執(zhí)行操作
1.SSH數(shù)據(jù)傳輸
1.1.將~/.ssh/
目錄下面的所有文件,復(fù)制到遠程主機的~/.ssh/
目錄
cd && tar czv .ssh | ssh root@192.168.1.104 'tar xz'
1.2.將遠程主機~/.ssh/
目錄下面的所有文件桂躏,復(fù)制到用戶的當(dāng)前目錄
ssh root@192.168.1.104 'tar cz .ssh' | tar zxv
2.通過SSH運行復(fù)雜的遠程shell命令
ssh 192.168.1.104 -l root "cat ~/.ssh/authorized_keys"
3.比較遠程和本地文件
# 比較本地文件和遠程文件是否有差異
ssh root@192.168.1.104 "cat ~/.ssh/authorized_keys" | diff ~/.ssh/authorized_keys –
4.通過SSH將MySQL數(shù)據(jù)庫復(fù)制到新服務(wù)器
# 通過壓縮的SSH隧道Dump一個MySQL數(shù)據(jù)庫钻趋,將其作為輸入傳遞給mysql命令
mysqldump –add-drop-table –extended-insert –force –log-error=error.log -uUSER -pPASS OLD_DB_NAME \
| ssh -C user@newhost "mysql -uUSER -pPASS NEW_DB_NAME"
5.實時SSH網(wǎng)絡(luò)吞吐量測試
# 通過SSH連接到主機,顯示實時的傳輸速度剂习,將所有傳輸數(shù)據(jù)指向/dev/null蛮位,需要先安裝pv
yes | pv | ssh root@192.168.1.104 "cat > /dev/null"
6.scp 跨機遠程拷貝
scp是secure copy的簡寫较沪,用于在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp失仁,不過cp只是在本機進行拷貝不能跨服務(wù)器尸曼,而且scp傳輸是加密的√呀梗可能會稍微影響一下速度控轿。兩臺主機之間復(fù)制文件必需得同時有兩臺主機的復(fù)制執(zhí)行帳號和操作權(quán)限。
6.1.scp命令參數(shù)
- -1 強制scp命令使用協(xié)議ssh1
- -2 強制scp命令使用協(xié)議ssh2
- -4 強制scp命令只使用IPv4尋址
- -6 強制scp命令只使用IPv6尋址
- -B 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
- -C 允許壓縮拂封。(將-C標(biāo)志傳遞給ssh茬射,從而打開壓縮功能)
- -p 留原文件的修改時間,訪問時間和訪問權(quán)限冒签。
- -q 不顯示傳輸進度條在抛。
- -r 遞歸復(fù)制整個目錄。
- -v 詳細方式顯示輸出萧恕。scp和ssh(1)會顯示出整個過程的調(diào)試信息刚梭。這些信息用于調(diào)試連接,驗證和配置問題廊鸥。
- -c cipher 以cipher將數(shù)據(jù)傳輸進行加密望浩,這個選項將直接傳遞給ssh。
- -F ssh_config 指定一個替代的ssh配置文件惰说,此參數(shù)直接傳遞給ssh。
- -i identity_file 從指定文件中讀取傳輸時使用的密鑰文件缘回,此參數(shù)直接傳遞給ssh吆视。
- -l limit 限定用戶所能使用的帶寬,以Kbit/s為單位酥宴。
- -o ssh_option 如果習(xí)慣于使用ssh_config(5)中的參數(shù)傳遞方式啦吧,
- -P port 注意是大寫的P, port是指定數(shù)據(jù)傳輸用到的端口號
- -S program 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項拙寡。
6.2.scp一般有六種使用方法
# 本地復(fù)制遠程文件:(把遠程的文件復(fù)制到本地)
scp root@192.168.1.104:/test.tar.gz ./test.tar.gz
# 遠程復(fù)制本地文件:(把本地的文件復(fù)制到遠程主機上)
scp ./test.tar.gz root@192.168.1.104:/test.tar.gz
# 本地復(fù)制遠程目錄:(把遠程的目錄復(fù)制到本地)
scp -r root@192.168.1.104:/val/test/ /val/test/
# 遠程復(fù)制本地目錄:(把本地的目錄復(fù)制到遠程主機上)
scp -r ./ root@192.168.1.104:/test/datasets
# 本地復(fù)制遠程文件到指定目錄:(把遠程的文件復(fù)制到本地)
scp root@192.168.1.104:/val/test/test.tar.gz /val/test/
# 遠程復(fù)制本地文件到指定目錄:(把本地的文件復(fù)制到遠程主機上)
scp /test.tar.gz root@192.168.1.104:/
三.SSH端口操作
1.綁定本地端口
既然SSH可以傳送數(shù)據(jù)授滓,那么我們可以讓那些不加密的網(wǎng)絡(luò)連接,全部改走SSH連接肆糕,從而提高安全性般堆。
假定我們要讓8080端口的數(shù)據(jù),都通過SSH傳向遠程主機诚啃,命令就這樣寫:
ssh -D 8080 root@192.168.1.104
SSH會建立一個socket淮摔,去監(jiān)聽本地的8080端口。
一旦有數(shù)據(jù)傳向那個端口始赎,就自動把它轉(zhuǎn)移到SSH連接上面和橙,發(fā)往遠程主機仔燕。可以想象魔招,如果8080端口原來是一個不加密端口晰搀,現(xiàn)在將變成一個加密端口。
2.本地端口轉(zhuǎn)發(fā)
假定host1是本地主機办斑,host2是遠程主機厕隧。由于種種原因,這兩臺主機之間無法連通俄周。
但是吁讨,另外還有一臺host3,可以同時連通前面兩臺主機峦朗。因此建丧,很自然的想法就是,通過host3波势,將host1連上host2翎朱。
我們在host1執(zhí)行下面的命令:
# ssh -L 本地端口:目標(biāo)主機:目標(biāo)主機端口
# 連接host1的2121端口,就等于連上了host2的21端口
ssh -L 2121:host2:21 host3
ftp localhost:2121
# 連接host1的9001端口尺铣,就等于連上了host2的22端口
ssh -L 9001:host2:22 host3
ssh -p 9001 localhost
3.遠程端口轉(zhuǎn)發(fā)
既然"本地端口轉(zhuǎn)發(fā)"是指綁定本地端口的轉(zhuǎn)發(fā)拴曲,那么"遠程端口轉(zhuǎn)發(fā)"(remote forwarding)當(dāng)然是指綁定遠程端口的轉(zhuǎn)發(fā)。
還是接著看上面那個例子凛忿,host1與host2之間無法連通澈灼,必須借助host3轉(zhuǎn)發(fā)。但是店溢,特殊情況出現(xiàn)了叁熔,host3是一臺內(nèi)網(wǎng)機器,它可以連接外網(wǎng)的host1床牧,但是反過來就不行荣回,外網(wǎng)的host1連不上內(nèi)網(wǎng)的host3。這時戈咳,"本地端口轉(zhuǎn)發(fā)"就不能用了心软,怎么辦?
解決辦法是著蛙,既然host3可以連host1删铃,那么就從host3上建立與host1的SSH連接,然后在host1上使用這條連接就可以了册踩。
我們在host3執(zhí)行下面的命令:
# ssh -R 遠程主機端口:目標(biāo)主機:目標(biāo)主機端口
ssh -R 2121:host2:21 host1
ftp localhost:2121
讓host1監(jiān)聽它自己的2121端口泳姐,然后將所有數(shù)據(jù)經(jīng)由host3,轉(zhuǎn)發(fā)到host2的21端口暂吉。由于對于host3來說胖秒,host1是遠程主機缎患,所以這種情況就被稱為"遠程端口綁定"。
四.SSH的其他參數(shù)
1.N參數(shù),T參數(shù)
表示只連接遠程主機阎肝,不打開遠程shell挤渔;T參數(shù),表示不為這個連接分配TTY风题。
這個兩個參數(shù)可以放在一起用判导,代表這個SSH連接只用來傳數(shù)據(jù),不執(zhí)行遠程操作沛硅。
ssh -NT -D 8080 host
2.f參數(shù)眼刃,表示SSH連接成功后,轉(zhuǎn)入后臺運行摇肌。這樣一來擂红,你就可以在不中斷SSH連接的情況下,在本地shell中執(zhí)行其他操作
# 要關(guān)閉這個后臺連接围小,就只有用kill命令去殺掉進程
ssh -f -D 8080 host
問題與支持
- Blog : https://blog.darebeat.cn
- Github: https://github.com/darebeat
- Gitee : https://gitee.com/darebeat