01 :ssh管理和批量推key

 

SSH 經常使用命令 和 功能 java

1:ssh 遠程登錄mysql

ssh -p22 root@192.168.6.180sql

ssh 端口 用戶名@IPshell

-p指定鏈接遠程主機端口,默認22端口可省略,若是不指定用戶名,默認是rootbash

 

2:scp遠程拷貝 (推,拉兩種模式)服務器

經常使用參數:ssh

-P 指定端口,默認22端口可不寫 -r 表示遞歸拷貝目錄 -p 表示在拷貝文件先後保持文件或目錄屬性不變 -l 限制傳輸使用帶寬(默認kb)spa

推: scp -P22 -rp /tmp/1.txt oldboy@10.0.0.61:/tmp

拉: scp -P22 -rp root@192.168.6.180:/tmp/1.txt /tmp/

 

  

3:sftp文件傳輸blog

xshell或者CRT,默承認以經過sftp命令鏈接sftp服務遞歸

sftp root@10.0.0.61  

-oPort=能夠指定端口(ssh)

sftp -oPort=888 root@192.168.6.180 

sftp使用get下載文件至於本地服務器

sftp> get conf.txt /tmp/

sftp使用put上傳本地服務器文件至遠程服務器

sftp> put /root/t1.txt /root/

 

4:ssh-copy-id祕鑰分發

1:須要先生成密鑰。ssh-keygen -t rsa 一路回車

 

 

 

id_rsa私鑰,id_rsa.pub的是公鑰

 

 

 

2.將180服務器上的公鑰推送至181服務器

[root@mysql80 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@182.168.6.181

 

3.使用ssh 180服務器鏈接181服務器是無需密碼的,若是能直接鏈接無需密碼則表示祕鑰已配置成功

[root@mysql80 ~]#ssh root@182.168.6.181 

不登錄遠程主機bash,但可在對端主機執行命令

[root@mysql80 ~]# ssh root@182.168.6.181 "cat /etc/passwd"

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

........

 

SSH 參數調優:/etc/ssh/sshd_config

通常調整的參數:

Port 6666 # 變動SSH服務遠程鏈接端口 PermitRootLogin no # 禁止root用戶直接遠程登陸 PasswordAuthentication no # 禁止使用密碼直接遠程登陸 UseDNS no # 禁止ssh進行dns反向解析,影響ssh鏈接效率參數 GSSAPIAuthentication no # 禁止GSS認證,減小鏈接時產生的延遲

-------------------------------------------------------------------------

批量推key(公鑰):

 

假如公司有幾百臺服務器,想經過一臺服務器ssh 連上去管理,咱們就須要使用ssh-copy-id把公鑰推到對方的服務器上面,可是每次都須要手動的輸入"yes" 和 root 用戶密碼,會很繁瑣。

 

以前咱們經常使用的方法是經過expect免交互寫個腳本,一次性批量推送公鑰。

 

免交互expect

[root@mysql80 ~]# yum install -y expect

2.編寫expect腳本

#!/usr/bin/expect

set ip 192.168.6.181

set pass 123456

set timeout 30

spawn ssh root@$ip/能夠替換成ssh-copy-id推key 

expect {

           "(yes/no)" {send "yes\r"; exp_continue}

            "password:" {send "$pass\r"}

 }

expect "root@*" {send "df -h\r"}

expect "root@*" {send "exit\r"} expect eof

  

 

咱們會發現expect語法很難記住,也不方便。因此能夠直接pass掉,下面使用sshpass命令來批量推key

 

 免交互sshpass

1.安裝sshpass

[root@m01 ~]# yum install -y sshpass

  

2.使用sshpass命令

[root@m01 ~]# sshpass -p 123456 ssh root@10.0.0.51

  

-p:指定密碼 -f:從文件中取密碼 -e:從環境變量中取密碼 -P:設置密碼提示

-------------------------------------------------------------------------

下面是我工做中寫的兩個版本的批量推key腳本:

#!/bin/bash

# date 2019-8-15

# key add 

#ansible - 主機清

  

單獲取ip

#q=`ansible $1 --list-host |grep -v "host"` &>/dev/null

#自定義ip文件

q=`cat $1`

root_name=root

#passwd_root=(xx1 xx2 ... xx100)

passwd_root=(12345 123213) #若是有多個root密碼,寫用空格隔開

 

>/tmp/ipok.txt

>/tmp/ipfalse.txt

 

for ip in $q

do

for x in ${passwd_root[@]}

do

#echo "$passwd_root"

sshpass -p "$x" ssh $root_name@$ip -o StrictHostKeyChecking=no "lsattr /root/.ssh/authorized_keys" 2>/dev/null |awk '{print $1}' |grep i &>/dev/null

if [ $? -eq 0 ];then

sudo sshpass -p "$x" sudo ssh $root_name@$ip chattr -i /root/.ssh/authorized_keys &>/dev/null

[ $? -eq 0 ] && echo "$ip chattr ---ok"

sudo sshpass -p "$x" sudo ssh-copy-id -i /root/.ssh/id_rsa.pub $root_name@$ip &>/dev/null

if [ $? -eq 0 ];then

echo "$ip ---1 ok"

echo "$ip" >>/tmp/ipok.txt

sed -i "/$ip/d" /tmp/ipfalse.txt

break

else

echo "$ip ---1 false"

echo "$ip" >>/tmp/ipfalse.txt

fi

else

sudo sshpass -p "$x" sudo ssh-copy-id -i /root/.ssh/id_rsa.pub $root_name@$ip &>/dev/null

if [ $? -eq 0 ];then

echo "$ip ---2 ok"

echo "$ip" >>/tmp/ipok.txt

sed -i "/$ip/d" /tmp/ipfalse.txt

break

else

echo "$ip ---2 false"

echo "$ip" >>/tmp/ipfalse.txt

fi

fi

done

done

 

-------------------------------------------------------------------------

  

還有一種更簡單暴力的:

#!/bin/bash

# date 2019-8-15

# key add

 

  

#ansible - 主機清單獲取ip

#q=`ansible $1 --list-host |grep -v "host"` &>/dev/null

#自定義ip文件

q=`cat $2`

root_name=root

#passwd_root=(xx1 xx2 ... xx100)

passwd_root=(12345 123213) #若是有多個root密碼,寫用空格隔開

 

root_rsa=`cat /root/.ssh/id_rsa.pub`

>/tmp/ipok_"$1".txt

>/tmp/ipfalse_"$1".txt

 

for ip in $q

do

for x in ${passwd_root[@]}

do

#echo "$passwd_root"

sshpass -p "$x" ssh $root_name@$ip -o StrictHostKeyChecking=no "mkdir -p /root/.ssh;chmod 700 /root/.ssh" &>/dev/null

sshpass -p "$x" ssh $root_name@$ip -o StrictHostKeyChecking=no "chattr -i /root/.ssh/authorized_keys" &>/dev/null

sshpass -p "$x" ssh $root_name@$ip -o StrictHostKeyChecking=no "echo ${root_rsa} >>/root/.ssh/authorized_keys;chmod 600 /root/.ssh/authorized_keys" &>/dev/null

if [ $? -eq 0 ];then

echo "$ip ---1 ok"

echo "$ip" >>/tmp/ipok_"$1".txt

sed -i "/$ip/d" /tmp/ipfalse_"$1".txt

break

else

echo "$ip ---2 false"

echo "$ip" >>/tmp/ipfalse_"$1".txt

fi

done

done

  

 

##############################################################################

相關文章
相關標籤/搜索