實驗室裡的機子主要裝了兩種Linux,Ubuntu和Fedora,平時大家傳資料,都是用U盤拖來脫去,甚是不便,於是,今天就寫一篇教程,教大家如何使用Linux自帶的scp命令來實現文件傳輸。
1.首先要保證兩個機子間能ping通。例如一個的ip地址是192.168.82.1(查看本機ip:$ ifconfig),用戶名為citA,另一台機子的ip地址是192.168.82.2,用戶名為citB。
在citA的終端中輸入$ ping 192.168.82.2 ,如果返回
PING 192.168.82.2 (192.168.82.2) 56(84) bytes of data.
From 192.168.82.1 icmp_seq=1 Destination Host Unreachable
From 192.168.82.1 icmp_seq=2 Destination Host Unreachable
....
說明網絡連接有問題,請檢查網線,網卡等設備。如果返回
PING 192.168.82.2 (192.168.82.2) 56(84) bytes of data.
64 bytes from 192.168.82.2: icmp_req=1 ttl=64 time=0.229 ms
64 bytes from 192.168.82.2: icmp_req=2 ttl=64 time=0.215 ms
64 bytes from 192.168.82.2: icmp_req=3 ttl=64 time=0.224 ms
....
說明兩機連通,可以進行下一步操作。
2.使用scp命令傳文件。
例如將citA的/home/citA/Desktop/a文件傳到citB的/home/citB/Desktop/裡,有兩種方法:
(1)進入citA的Desktop目錄中
$ cd /home/citA/Desktop
然後執行scp命令
$ scp a [email protected]:/home/citB/Desktop
格式為
$ scp 文件名 接受端用戶名@接受端ip地址:接受端路徑
(2)或者在任意目錄下,輸入發送端的完整路徑
$ scp /home/citA/Desktop/a [email protected]:/home/citB/Desktop
格式為
$ scp 發送端路徑+文件名 接受端用戶名@接受端ip地址:接受端路徑
當然了,你要有對方用戶的密碼才可以。如果是文件夾,使用scp -r即可。如果想將當前目錄下所有文件夾全部發送,scp -r *就可以了。
搞定。。。
下面介紹下可能出現的錯誤及異常情況。
1.如果向fedora系統的機子傳送文件時出現
ssh: connect to host 192.168.82.15 port 22: No route to host lost connection
可能是由於fedora的系統默認關閉了傳輸文件的22端口導致的,我們用命令打開它,在接受端上輸入:
$ su
輸入密碼,進入最高權限,然後開啟22端口:
# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
此時,再次嘗試傳輸命令,如果依舊報錯,還是進入接受端,在最高權限下,重啟它的sshd服務,注意要輸入完整路徑名:
# /etc/init.d/sshd restart
此時再次嘗試傳輸,應該會成功。
2.如果出現 Permission denied,這個問題主要是權限問題。
(1)首先檢查自己要發送的文件是否有自己可以執行的權限,使用
$ ls -l 文件名
查看,如果權限不足,可以使用
$ chmod 777 文件名
來提升文件權限。
(2)可能是路徑的權限問題
檢查自己是否具有向接受端路徑寫的權限,例如,當處在普通權限時,如果向接受端的 / 目錄下寫,就必定是Permission denie的。
3.對於 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
是由於先前已經連接過此接受端,本機中就會存儲接受端的歷史信息,結果再次連接時接受端的信息出現了變化,與本機中存儲的歷史信息不符,導致的錯誤,只要將本機中存儲的歷史信息刪除即可。
按照報錯信息提示,進入/home/cit/.ssh/
$ cd /home/cit/.ssh/
使用vi編輯器或gedit打開known_hosts
$ vi known_hosts
或
$ gedit known_hosts
全部刪除裡面的信息即可,記住不是刪除這個文件,是打開文件,刪除裡面的信息。。。
至此,scp文件傳輸應該就可以搞定了。