1. 程式人生 > 其它 >Linux 叢集 SCP & SSH 命令

Linux 叢集 SCP & SSH 命令

scp (叢集之間傳輸檔案)

叢集模式下,使用 scp 命令各節點之間拷貝檔案

命令格式:

# scp file 遠端使用者名稱@遠端伺服器IP(或主機名):~/ 
  • 冒號和目錄之間不能有空格

  • 拷貝目錄,需要加 -r 選項

使用 root 使用者

# scp /etc/profile root@node-01:/etc  # 標準格式
# scp -r /usr/jdk1.8 node-02:/usr/java # 1)如果遠端使用者名稱不寫則為當前root使用者,2)拷貝目錄需要加 -r
# scp hello.log node-02:`pwd` # `pwd`表示執行pwd命令
# scp hello.log node-02:$PWD # $PWD 表示當前目錄

ssh (叢集之間執行 shell 命令)

  • 遠端向其他主機發送命令

# ssh node-02 ls
  • 遠端切換到其他主機

# ssh node-03

每次傳輸和切換都要求輸入密碼

配置 ssh 免密登入

ssh 免密登入機制
  • 首先,在主機 A 建立一對公鑰、私鑰

    公鑰檔案:~/.ssh/id_rsa.pub 私鑰檔案:~/.ssh/id_rsa

  • 然後,將公鑰新增到主機 B 的公鑰檔案中,自己保留好私鑰

    公鑰檔案:~/.ssh/authorized_keys

  • 最後,當主機 A 通過 ssh 登入 主機 B 時,ssh 程式會發送私鑰去和主機 B 上的公鑰做匹配,如果匹配成功 主機 A 就可以登入主機 B 了

ssh 免密登入操作
  • node-01 生成一對金鑰(公鑰和私鑰)

    生成金鑰檔案時,會有提示輸入加密資訊,都按回車鍵即可

[root@node-01 ~]# ssh-keygen -t rsa
[root@node-01 ~]# cd ~/.ssh/
  • 將 node-01 的公鑰追加到 node-01、node-02、node-03、node-04 的授權檔案 authorized_keys 中

[root@node-01 ~]# ssh-copy-id node-01
[root@node-01 ~]# ssh-copy-id node-02
[root@node-01 ~]# ssh-copy-id node-03
[root@node-01 ~]# ssh-copy-id node-04
  • 驗證免密登入

    因為免密登入是單向的,所以需要分別設定免密登入,現在 node-01 可以免密登入 node-01、node-02、node-03、node-04

[root@node-01 ~]# ssh node-01
[root@node-01 ~]# ssh node-02
[root@node-01 ~]# ssh node-03
[root@node-01 ~]# ssh node-04

ssh 免密登入過程

  • node-01(Client) 向 node-02(Server) 傳送連線請求時,附帶主機名、ip 地址等資訊

  • node-02 收到請求後,去授權檔案(authorized)裡查詢 node-01 的公鑰,找到之後隨機生成一個字串用公鑰加密傳送給 node-01

  • node-01 接收到 node-02 傳送的密文後,用私鑰解密並把解密結果返回給 node-02

  • node-02 拿到解密結果之後,與之前生成的字串進行比較,如果相同則允許 node-01 免密登入

Hadoop 叢集配置免密 SSH 登入

Hadoop 叢集包含 1 個主節點和 3 個從節點,需要實現各節點之間的免密碼登入

Hadoop叢集環境
節點名稱節點IP
node-01 192.168.229.21
node-02 192.168.229.22
node-03 192.168.229.23
node-04 192.168.229.24
免密登入原理

每臺主機authorized_keys檔案裡面包含的主機(ssh金鑰),該主機都能無密碼登入,所以只要每臺主機的authorized_keys檔案裡面都放入其他主機(需要無密碼登入的主機)的 ssh 金鑰即可

實現步驟

1、每個節點生成 ssh 金鑰

[root@node-01 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
.....................

[root@node-01 .ssh]# ls
id_rsa id_rsa.pub

[root@node-02 ~]# ssh-keygen -t rsa
[root@node-03 ~]# ssh-keygen -t rsa
[root@node-04 ~]# ssh-keygen -t rsa

執行命令後會在 ~ 目錄下生成 .ssh 資料夾,裡面包含 id_rsa(私鑰) 和 id_rsa.pub(公鑰) 兩個檔案

2、在主節點上將公鑰拷到一個授權檔案 authorized_keys 中

[root@node-01 ~]# cd .ssh
[root@node-01 .ssh]# ls
id_rsa id_rsa.pub
[root@node-01 .ssh]# cp id_rsa.pub authorized_keys
[root@node-01 .ssh]# ls
authorized_keys id_rsa id_rsa.pub

3、將 authorized_keys 檔案拷到下一個節點,並將該節點的 ssh 金鑰 id_rsa.pub 加入該檔案中

#在 node-01 上使用 scp 命令實現遠端檔案拷貝
[root@node-01 .ssh]# scp authorized_keys root@node-02:/root/.ssh/
The authenticity of host 'node-02 (192.168.229.22)' can't be established.
ECDSA key fingerprint is SHA256:MyB1zs0E3J/fm8pC0AN8ycsgEIBNHtUqd9xS0WAyv3s.
ECDSA key fingerprint is MD5:88:48:3a:ba:3e:14:a7:d7:86:f6:51:74:00:10:f9:00.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node-02,192.168.229.22' (ECDSA) to the list of known hosts.
root@node-02's password:
authorized_keys 100% 395 306.2KB/s 00:00

# 登入 node-02 主機
[root@node-02 ~]# cd .ssh/
[root@node-02 .ssh]# ls
authorized_keys id_rsa id_rsa.pub
# 使用 cat 追加方式將 id_rsa.pub 檔案內容新增到 authorized_keys 中
[root@node-02 .ssh]# cat id_rsa.pub >> authorized_keys

4、 重複第 3 步的操作,依次將 node-03、node-04 節點的 ssh 金鑰加入到 authorized_keys 檔案中,並將 node-04 節點生成的authorized_keys 檔案拷貝到其他三個節點(node-01、node-02、node-03)即可

#登入 node-03 主機,將 ssh 金鑰加入 authorized_keys 檔案中
[root@node-03 .ssh]# cat id_rsa.pub >> authorized_keys
[root@node-03 .ssh]# scp authorized_keys root@node-04:/root/.ssh/

#登入 node-04 主機,將 ssh 金鑰加入 authorized_keys 檔案中
[root@node-04 .ssh]# cat id_rsa.pub >> authorized_keys

#將最後生成的 authorized_keys 檔案分別拷貝到 node-01、node-02 和 node-03 中
[root@node-04 .ssh]# scp authorized_keys root@node-01:/root/.ssh/
[root@node-04 .ssh]# scp authorized_keys root@node-02:/root/.ssh/
[root@node-04 .ssh]# scp authorized_keys root@node-03:/root/.ssh/

5、驗證免密登入

使用 ssh 使用者名稱@節點名或 ssh ip 地址命令驗證免密碼登入

[root@node-01 .ssh]# ssh root@node-02
[root@node-02 .ssh]# ssh root@node-01
[root@node-03 .ssh]# ssh root@node-04
[root@node-04 .ssh]# ssh root@node-03