伺服器間免密登陸和分發指令碼

2021-09-11 14:08:12 字數 3056 閱讀 7670

(1)進入到我的home目錄

cd  ~/.ssh
(2)生成公鑰和私鑰:

ssh-keygen -t rsa
然後敲(三個回車),就會生成兩個檔案id_rsa(私鑰)、id_rsa.pub(公鑰)

(3)將公鑰拷貝到要免密登入的目標機器上(會被拷貝到目標伺服器的~/.ssh/authorized_keys中)

ssh-copy-id hadoop103

ssh-copy-id hadoop104

ss**件夾下的檔案功能解釋(1)~/.ssh/known_hosts :記錄ssh訪問過計算機的公鑰(public key)

(2)id_rsa :生成的私鑰

(3)id_rsa.pub :生成的公鑰

(4)authorized_keys :存放授權過得無秘登入伺服器公鑰

原理:

免密登陸命令:

ssh root@hadoop103
主要用於備份和映象。具有速度快、避免複製相同內容和支援符號鏈結的優點。

rsync和scp區別:用rsync做檔案的複製要比scp的速度快,rsync只對差異檔案做更新。s

cp是把所有檔案都複製過去。

(1)檢視rsync使用說明

man rsync | more
(2)基本語法

rsync -rvl     $pdir/$fname         $user@hadoop$host:$pdir
命令

命令引數

要拷貝的檔案

路徑/名稱

目的使用者

@主機:目的

路徑

選項

-r 遞迴

-v 顯示複製過程

-l 拷貝符號鏈結

(3)案例實操

把本機/opt/tmp目錄同步到hadoop103伺服器的root使用者下的/opt/tmp目錄rs

ync -rvl /opt/tmp/*  root@hadoop103:/opt/tmp

1)需求分析:迴圈複製檔案到所有節點的相同目錄下。

(1)原始拷貝:

rsync  -rvl     /opt/module    root@hadoop103:/opt/
(2)期望指令碼:

xsync + 要同步的檔名稱
(3)在/usr/local/bin這個目錄下存放的指令碼,可以在系統任何地方直接執行。

2)案例實操:

(1)在/usr/local/bin目錄下建立xsync檔案,檔案內容如下:

#!/bin/bash

#1 獲取輸入引數個數,如果沒有引數,直接退出

pcount=$#

if((pcount==0)); then

echo no args;

exit;

fi#2 獲取檔名稱

p1=$1

fname=`basename $p1`

echo fname=$fname

#3 獲取上級目錄到絕對路徑

pdir=`cd -p $(dirname $p1); pwd`

echo pdir=$pdir

#4 獲取當前使用者名稱

user=`whoami`

#5 迴圈

for((host=103; host<105; host++)); do

#echo $pdir/$fname $user@hadoop$host:$pdir

echo --------------- hadoop$host ----------------

rsync -rvl $pdir/$fname $user@hadoop$host:$pdir

done

(2)修改指令碼 xsync 具有執行許可權

chmod a+x xsync
(3)呼叫指令碼形式:

xsync myfile
1)需求分析:在所有主機上同時執行相同的命令

xcall + 命令
2

)具體實現

(1)在/usr/local/bin目錄下建立xcall檔案,檔案內容如下:

#!/bin/bash

pcount=$#

if((pcount==0));then

echo no args;

exit;

fiecho -------------localhost----------

$@for((host=101; host<=108; host++)); do

echo ----------hadoop$host---------

ssh hadoop$host $@

done

(2)修改指令碼 xcall 具有執行許可權

chmod a+x xcall
(3)呼叫指令碼形式: xcall 操作命令

xcall rm -rf /opt/tmp/profile
五、可能遇到的問題

私鑰是正確的,看提示資訊應該是許可權設定的問題。

私鑰的許可權只能是700,執行下面命令修改之後就可以

chmod -r 700 ~/.ssh/*

# .ssh 是我的私鑰目錄,-r遞迴改完全部的秘鑰的許可權

Shell指令碼免密登陸 Expect

1 建立在tcl上的乙個工具 2 用於進行自動化控制和測試 3 解決shell指令碼中互動相關的問題。1 判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回 2 只能捕捉由spawn啟動的程序的輸出 3 用於接收命令執行後的輸出,然後和期望的字串匹配。1 向程序傳送字串...

Linux伺服器之間快速設定免密登陸

假設 server a 要免密登入到server b,僅需要把 server a 的公鑰id rsa.pub寫到 server b 的authorized keys檔案裡。要實現這種操作,只需要如下兩步 1 server a 生成公鑰 登入到 server a 執行命令 ssh keygen t r...

Ubuntu伺服器免密 自定義命名登陸

伺服器學習記錄 本地生成金鑰對 ssh keygen 把生成的公鑰上傳至你的伺服器 scp ssh id rsa.pub xx 登陸你的伺服器 ssh xx 進入cd ssh目錄,檢視該目錄下是否存在authorized keys這個檔案,若不存在,新建該檔案touch authorized key...