導航:首頁 > 程序命令 > ssh命令復制

ssh命令復制

發布時間:2024-10-27 18:43:59

linux 使用scp命令從一台機器復制文件到另一台linux機器上去

scp是 secure 的縮寫, scp是 linux 系統下基於ssh登陸進行安全的遠程文件拷貝命令。 linux 的scp命令可以在linux 伺服器 之間復制文件和目錄.
scp命令基本格式:

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program]
[[user@]host1:]file1 [...] [[user@]host2:]file2

scp命令的參數說明:

-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)的選項
scp命令的實際應用
本地復制遠程文件:(把遠程的文件復制到本地)
scp [email protected]:/val/test/test.tar.gz /val/test/test.tar.gz
遠程復制本地文件:(把本地的文件復制到遠程主機上)
scp /val/test.tar.gz [email protected]:/val/test.tar.gz
本地復制遠程目錄:(把遠程的目錄復制到本地)
scp -r [email protected]:/val/test/ /val/test/
遠程復制本地目錄:(把本地的目錄復制到遠程主機上)
scp -r /val/ [email protected]:/val/
註:復制的是目錄的話就要加-r參數
當同時有多個伺服器的文件要復制到本地目錄:
scp [email protected]:/var/cp1.tar.gz [email protected]:/var/cp2.tar.gz /var/tmp/

注意:最後面的一個必需是目錄,前面的必須是文件,才能成功批量復制,復制中會提示多次輸入密碼。

② linux中ssh如何遠程執行一條命令,而且不登錄遠程伺服器

一 SSH命令使用技巧

- 遠程登錄

ssh [email protected]

- 遠程執行

ssh [email protected] 'command ...'

- 遠程復制

scp [email protected]:/remote/path /local/path

scp /local/path [email protected]:/remote/path

- X forward

ssh -X [email protected]

xcommand ...

- Tunnel / Portforward

ssh -L 1234:remote.machine:4321 [email protected]

ssh -R 1234:local.machine:4321 [email protected]

ssh -L 1234:other.machine:4321 [email protected]

二, 實作

1) 禁止 root 登錄

# vi /etc/ssh/sshd_config

PermitRootLogin no

2) 廢除密碼登錄, 強迫使用 RSA 驗證(假設 ssh 賬戶為 user1 )

# vi /etc/ssh/sshd_config

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no

# service sshd restart

# su - user1

$ mkdir ~/.ssh 2>/dev/null

$ chmod 700 ~/.ssh

$ touch ~/.ssh/authorized_keys

$ chmod 644 ~/.ssh/authorized_keys

登入端:

$ ssh-keygen -t rsa

(按三下 enter 完成﹔不需設密碼,除非您會用 ssh-agent 。)

$ scp ~/.ssh/id_rsa.pub [email protected]:id_rsa.pub

(若是 windows client, 可用 puttygen.exe 產生 public key,

然後復制到 server 端後修改之, 使其內容成為單一一行.)

回到 server 端:

$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

$ rm ~/id_rsa.pub

$ exit

3) 限制 su / sudo 名單:

# vi /etc/pam.d/su

auth required /lib/security/$ISA/pam_wheel.so use_uid

# visudo

%wheel ALL=(ALL) ALL

# gpasswd -a user1 wheel

4) 限制 ssh 使用者名單

# vi /etc/pam.d/sshd

auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users ōnerr=fail

# echo user1 >> /etc/ssh_users

③ SSH遠程操作與埠轉發的原理

SSH不僅可以用於遠程主機登錄,還可以直接在遠程主機上執行操作。

上一節的操作,就是一個例子:

單引號中間的部分,表示在遠程主機上執行的操作;後面的輸入重定向,表示數據通過SSH傳向遠程主機。

這就是說,SSH可以在用戶和遠程主機之間,建立命令和數據的傳輸通道,因此很多事情都可以通過SSH來完成。

下面看幾個例子。
【例1】
將 HOME/src/目錄。

【例2】
將遠程主機$HOME/src/目錄下面的所有文件,復制到用戶的當前目錄。

【例3】
查看遠程主機是否運行進程httpd。

既然SSH可以傳送數據,那麼我們可以讓那些不加密的網路連接,全部改走SSH連接,從而提高安全性。

假定我們要讓8080埠的數據,都通過SSH傳向遠程主機,命令就這樣寫:

SSH會建立一個socket,去監聽本地的8080埠。一旦有數據傳向那個埠,就自動把它轉移到SSH連接上面,發往遠程主機。可以想像,如果8080埠原來是一個不加密埠,現在將變成一個加密埠。

有時,綁定本地埠還不夠,還必須指定數據傳送的目標主機,從而形成點對點的"埠轉發"。為了區別後文的"遠程埠轉發",我們把這種情況稱為"本地埠轉發"(Local forwarding)。

假定host1是本地主機,host2是遠程主機。由於種種原因,這兩台主機之間無法連通。但是,另外還有一台host3,可以同時連通前面兩台主機。因此,很自然的想法就是,通過host3,將host1連上host2。
我們在host1執行下面的命令:

命令中的L參數一共接受三個值,分別是"本地埠:目標主機:目標主機埠",它們之間用冒號分隔。這條命令的意思,就是指定SSH綁定本地埠2121,然後指定host3將所有的數據,轉發到目標主機host2的21埠(假定host2運行FTP,默認埠為21)。

這樣一來,我們只要連接host1的2121埠,就等於連上了host2的21埠。

"本地埠轉發"使得host1和host3之間彷彿形成一個數據傳輸的秘密隧道,因此又被稱為"SSH隧道"。

下面是一個比較有趣的例子。

它表示將本機的5900埠綁定host3的5900埠(這里的localhost指的是host3,因為目標主機是相對host3而言的)。
另一個例子是通過host3的埠轉發,ssh登錄host2。

這時,只要ssh登錄本機的9001埠,就相當於登錄host2了。

上面的-p參數表示指定登錄埠。

既然"本地埠轉發"是指綁定本地埠的轉發,那麼"遠程埠轉發"(remote forwarding)當然是指綁定遠程埠的轉發。還是接著看上面那個例子,host1與host2之間無法連通,必須藉助host3轉發。但是,特殊情況出現了,host3是一台內網機器,它可以連接外網的host1,但是反過來就不行,外網的host1連不上內網的host3。這時,"本地埠轉發"就不能用了,怎麼辦?

解決辦法是,既然host3可以連host1,那麼就從host3上建立與host1的SSH連接,然後在host1上使用這條連接就可以了。

我們在host3執行下面的命令:

R參數也是接受三個值,分別是"遠程主機埠:目標主機:目標主機埠"。這條命令的意思,就是讓host1監聽它自己的2121埠,然後將所有數據經由host3,轉發到host2的21埠。由於對於host3來說,host1是遠程主機,所以這種情況就被稱為"遠程埠綁定"。

綁定之後,我們在host1就可以連接host2了:

這里必須指出,"遠程埠轉發"的前提條件是,host1和host3兩台主機都有sshD和ssh客戶端。

SSH還有一些別的參數,也值得介紹。

N參數,表示只連接遠程主機,不打開遠程shell;T參數,表示不為這個連接分配TTY。這個兩個參數可以放在一起用,代表這個SSH連接只用來傳數據,不執行遠程操作。

f參數,表示SSH連接成功後,轉入後台運行。這樣一來,你就可以在不中斷SSH連接的情況下,在本地shell中執行其他操作。

要關閉這個後台連接,就只有用kill命令去殺掉進程。

閱讀全文

與ssh命令復制相關的資料

熱點內容
主角是程序員的重生小說推薦 瀏覽:318
壓縮機十字頭裝配視頻 瀏覽:805
屏幕錄像軟體源碼 瀏覽:310
app如何靜默更新 瀏覽:83
南京程序員接私活報價 瀏覽:936
阿里雲伺服器和價格 瀏覽:448
怎麼給u盤添加密碼分區 瀏覽:629
區域狗開發源碼 瀏覽:265
用網上下載雲豹的源碼 瀏覽:264
安卓攝像頭被佔用怎麼辦 瀏覽:868
安卓qq營銷助手怎麼弄 瀏覽:527
windosphp 瀏覽:977
linuxpythoncrontab 瀏覽:445
豆瓣圖片尺寸不被壓縮 瀏覽:701
未找到rpm命令oracle 瀏覽:977
phplaravel學習 瀏覽:719
文件解壓怎麼更改名字 瀏覽:759
我的程序員那麼可愛更新時間 瀏覽:726
女程序員街頭流浪 瀏覽:538
全面的電話機器人源碼 瀏覽:16