(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...