一般的用戶名密碼認證不安全,很容易被暴力破解,還不方便;而大多數人都是選擇使用 SSH 密鑰認證,不僅安全還不用每次輸密碼
ssh密鑰對
ssh自動登錄
ssh使用代理
連接國外 VPS 時,因為某些原因,ssh 連上了很卡,而且經常失去連接,因此需要讓 ssh 走代理加速
ssh 使用 socks5、http_connect 代理:ssh -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
,通過 socks5 代理ssh -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
,通過 http_connect 代理
scp/sftp 使用 socks5、http_connect 代理:scp -Cpr -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" files USER@SSH_SERVER:/tmp/
scp -Cpr -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" files USER@SSH_SERVER:/tmp/
sftp -oProxyCommand="nc -X5 -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
sftp -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
如果你使用的是 XShell,也可以設置代理:屬性
-> 連接
-> 代理
-> 添加、選擇代理服務器
-> 重新連接ssh
scp傳輸文件和文件夾
#向遠端傳文件 $ scp [-r] dir/file_name user_name@ip_addr/domain_name:dir #從遠端往本地傳文件 $ scp [-r] user_name@ip_addr/domain_name:dir/file_name dir
usr_name是用戶名
ip_addr是ip地址
domain_name是域名
當不輸入user_name的時候會默認使用本地用戶名
dir是文件目錄
file_name是文件名
如果傳輸的是文件夾需要加上-r參數,傳送文件不用
同樣的,每次輸入ip地址或者域名都太復雜了,剛剛的~/.ssh/config文件還在,完全可以執行
$ scp [-r] dir/file_name alias_name:dir $ scp [-r] alias_name:dir/file_name dir # 傳輸到本地時可以使用相對路徑,當前目錄可以用.替代,上級目錄可以用..替代
進行傳送文件。
遠端dir如果值為空,默認傳輸到服務器用戶的家目錄下
$ scp [-r] dir/file_name alias_name: # 等同於# $ scp [-r] dir/file_name alias_name:~
#############################################
有兩台服務器,client端沒有root權限,接收端server有root權限。現在需要從client端免密scp文件到server端。
因為client端沒有.ssh文件夾的訪問權限,所以不能直接使用client端的密鑰,需要從server端生成密鑰文件。
整個流程操作步驟如下:
1、server端生成密鑰,並且把公鑰添加到authorized_keys
2、把私鑰上傳到client端
3、使用scp -i指定密鑰傳輸
# 把本地的 /path/to/local/file 文件傳輸到遠程的 /path/to/remote/file
scp -P port /path/to/local/file user@remote:/path/to/remote/file
# 也可以使用別名
scp /path/to/local/file lab:/path/to/remote/file
# 把遠程的 /path/to/remote/file 下載到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file
# 遠程的默認路徑是家目錄
# 下面命令把當前目錄下的 file 傳到遠程的 ~/dir/file
scp file lab:dir/file
# 加上 -r 命令可以傳送文件夾
# 下面命令可以把當前目錄下的 dir 文件夾傳到遠程的家目錄下
scp -r dir lab:
# 別忘了 . 可以用來指代當前目錄
# 下面命令可以把遠程的 ~/dir 目錄下載到當前目錄里面
scp -r lab:dir/ .
server端配置
生成密鑰對
執行ssh-keygen -t rsa,完成之后在/root/.ssh文件夾可以查看到密鑰對id_rsa為密鑰文件,id_rsa.pub為公鑰文件;
執行cp -rf /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys即可
上傳私鑰
把server端的id_rsa上傳至client端即可
使用scp傳輸
1.命令格式:
scp [參數] [原路徑] [目標路徑]
2.命令功能:
scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠程文件拷貝命令。linux的scp命令可以在linux服務器之間復制文件和目錄。
3.命令參數:
-1 強制scp命令使用協議ssh1
-2 強制scp命令使用協議ssh2
-4 強制scp命令只使用IPv4尋址
-6 強制scp命令只使用IPv6尋址
-B 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
-C 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)
-p 保留原文件的修改時間,訪問時間和訪問權限。
-q 不顯示傳輸進度條。
-r 遞歸復制整個目錄。
-v 詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。
-c cipher 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。
-F ssh_config 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。
-i identity_file 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。
-l limit 限定用戶所能使用的帶寬,以Kbit/s為單位。
-o ssh_option 如果習慣於使用ssh_config(5)中的參數傳遞方式,
-P port 注意是大寫的P, port是指定數據傳輸用到的端口號
-S program 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
此處用到的就是-i參數
使用前記得把id_rsa權限改成600,權限太大會報錯
scp -i id_rsa auto_feature/featurefile/特征庫* root@172.16.16.199:/HYTF/TD/特征庫文件/第二代特征庫/
備注:
1、此處id_rsa必須與server端的公鑰配對
2、如id_rsa文件放在其他目錄,記得加上路徑
####################################
在平時工作中,有時候需要SSH登陸到別的Linux主機上去,但有時候SSH登陸會被禁止,並彈出如下類似提示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that the RSA host key has just been changed.The fingerprint for the RSA key sent by the remote host is36:68:a6:e6:43:34:6b:82:d7:f4:df:1f:c2:e7:37:cc.Please contact your system administrator.Add correct host key in /u/xlian008/.ssh/known_hosts to get rid of this message.Offending key in /u/xlian008/.ssh/known_hosts:2RSA host key for 135.1.35.130 has changed and you have requested strict checking.Host key verification failed. 比較奇怪,於是研究了一下。 ssh會把你每個你訪問過計算機的公鑰(public key)都記錄在~/.ssh/known_hosts。當下次訪問相同計算機時,OpenSSH會核對公鑰。如果公鑰不同,OpenSSH會發出警告, 避免你受到DNS Hijack之類的攻擊。我在上面列出的情況,就是這種情況。 原因:一台主機上有多個Linux系統,會經常切換,那么這些系統使用同一ip,登錄過一次后就會把ssh信息記錄在本地的~/.ssh/known_hsots文件中,切換該系統后再用ssh訪問這台主機就會出現沖突警告,需要手動刪除修改known_hsots里面的內容。 有以下兩個解決方案: 1. 手動刪除修改known_hsots里面的內容; 2. 修改配置文件“~/.ssh/config”,加上這兩行,重啟服務器。 StrictHostKeyChecking no UserKnownHostsFile /dev/null 優缺點: 1. 需要每次手動刪除文件內容,一些自動化腳本的無法運行(在SSH登陸時失敗),但是安全性高; 2. SSH登陸時會忽略known_hsots的訪問,但是安全性低;