https://blog.csdn.net/yucicheung/article/details/79427578
問題描述
做DL的經常需要在一台電腦(本地主機)上寫代碼,另一台電腦(服務器,計算力強)上進行訓練,我們在兩台電腦上都安裝的是Ubuntu16.04,為了在local主機下也可以隨時跑程序,調代碼,同時省流量而且迅速(不考慮這些的話用teamviewer也行),所以在兩台電腦主機上進行SSH配置。
基礎:ssh命令連接
step1:SSH程序的安裝
確保在服務器上安裝好了openssh-server程序,在本地主機上安裝好了openssh-client程序。
sudo apt install openssh-client #本地主機運行此條,實際上通常是默認安裝client端程序的
sudo apt install openssh-server #服務器運行此條命令安裝
step2:服務器啟動ssh服務
以下命令都只針對服務器端(server only)。
一般服務器上安裝ssh完成后,會自動啟動ssh服務,並且默認隨系統啟動,如果沒有,請手動啟動:
sudo /etc/init.d/ssh start #服務器啟動ssh-server服務,
其他命令:
sudo /etc/init.d/ssh stop #server停止ssh服務
sudo /etc/init.d/ssh restart #server重啟ssh服務
step3:查詢服務器的ip地址
在服務器終端運行以下命令:
ifconfig #查詢ip地址,在返回信息中找到自己的ip地址
step4:在本地主機端ssh遠程登錄服務器
這一步需要知道服務器的用戶名(我的服務器名字也是yucicheung)及IP地址。
在本地主機上運行以下命令:
用戶端連接服務器用於登錄遠程桌面(以下user時遠程主機的用戶名)
ssh qian@10.170.11.147 #用戶名@IPdress #或 ssh -l qian@10.170.11.147 # 如果需要調用圖形界面程序 ssh -X qian@10.170.11.147
初次登錄時會出現以下信息,請記住要輸入的密碼是服務器主機本身的登陸密碼:
以上表示連接成功,且命令提示副前的用戶名@主機名
由本地主機變成服務器的信息,即表明現在該終端所有的命令都是在服務器中執行。
本地主機端登錄相關的其他命令:
- 如果服務器的SSH服務沒有開啟在22端口,那么SSH鏈接時則需要用
-p
指定端口(如202):
ssh -p 202 yucicheung@10.170.11.147 #或 ssh -l yucicheung -p 202 10.170.11.147
step5:退出遠程登錄
用Ctrl+D或者
exit
進階:利用公鑰省去密碼輸入
每次登錄遠程主機都需要輸入密碼是很不便捷的,如果要加速這一步驟,可以利用密鑰對進行連接,主要思路是:生成一對公鑰私鑰,私鑰在local主機上,公鑰在遠程服務器上,每次建立ssh連接自動檢查密鑰對是否匹配。
step1 生成密鑰對
ssh-keygen -t rsa #-t表示選擇類型,類型為rsa
簡化命令:ssh-keygen
執行以后會在$HOME目錄下生成一個.ssh文件夾,其中包含私鑰文件id_rsa
和公鑰文件id_rsa.pub
。
step2 復制公鑰至服務器
方法一:ssh-copy-id -i .ssh/id_rsa.pub user@host #用戶名@IP 將地址拷貝到遠程端
簡化命令:ssh-copy-id user@host
方法二:
# 登錄遠程服務器 ssh yucicheung@10.170.11.147 # 在服務器上創建.ssh文件夾,如果已經存在就跳過此步 mkdir .ssh # 為了保證.ssh文件夾的安全,應取消其他用戶對文件夾的所有權限 chmod 700 .ssh # 退出登錄 exit # 本地主機的公鑰復制到遠程服務器,作為已認證密鑰 scp /home/yucicheung/.ssh/id_rsa.pub yucicheung@10.170.44.206:/home/yucicheung/.ssh/authorized_keys
在進行以上配置以后,再進行連接時,就可以免去口令(密碼)的輸入了。
配置別名:
每次都輸入 `ssh -p port user@remote`,時間久了會覺得很麻煩,特別是當 `user`, `remote` 和 `port` 都得輸入,而且還不好記憶
而 **配置別名** 可以讓我們進一步偷懶,譬如用:`ssh mac` 來替代上面這么一長串,那么就在 `~/.ssh/config` 里面追加以下內容:
Host mac HostName ip地址 User your_username Port 22
保存之后,即可用 `ssh mac` 實現遠程登錄了,`scp` 同樣可以使用
SCP遠程拷貝文件
# 把本地當前目錄下的 01.py 文件 復制到 遠程 家目錄下的 Desktop/01.py
# 注意:`:` 后面的路徑如果不是絕對路徑,則以用戶的家目錄作為參照路徑
scp -P port 01.py user@remote:Desktop/01.py
# 把遠程 家目錄下的 Desktop/01.py 文件 復制到 本地當前目錄下的 01.py
scp -P port user@remote:Desktop/01.py 01.py
# 加上 -r 選項可以傳送文件夾
# 把當前目錄下的 demo 文件夾 復制到 遠程 家目錄下的 Desktop
scp -r demo user@remote:Desktop
# 把遠程 家目錄下的 Desktop 復制到 當前目錄下的 demo 文件夾
scp -r user@remote:Desktop demo
選項 含義
-r 若給出的源文件是目錄文件,則 scp 將遞歸復制該目錄下的所有子目錄和文件,目標文件必須為一個目錄名
-P 若遠程 SSH 服務器的端口不是 22,需要使用大寫字母 -P 選項指定端口