Linux远程登录和多机操作

**1.两台虚拟机实现相互连接登录操作
连接步骤
Linux远程登录和多机操作_第1张图片
1)分别在两台机器上创建luser用户

useradd luser
passwd luser

2)创建 .ssh目录

cd luser~
mkdir .ssh

3)生成第一台机器的公私钥,并把公钥复制一份,通过sz下载到本地,通过rz上传到第二台机器上面. 并给.ssh目录和公钥设置权限

#生成ssh 公私密钥,在.ssh 目录下生成公钥文件(id_rsa.pub)和私钥文件(id_rsa)
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

#输出公钥文件内容并且重新输入到~/.ssh/authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
#给~/.ssh目录加上700权限
chmod 700 ~/.ssh
#给~/.ssh/authorized_keys加上600权限
chmod 600 ~/.ssh/authorized_keys

4)修改主机名

hostnamectl set-hostname linux01
hostnamectl set-hostname linux02

配置hosts文件

vim  /etc/hosts
192.168.47.235 linux01
192.168.47.130 linux02

5)以luser用户身份登录到linux02机器上

su - luser
ssh luser@linux02

6)指定在linux02上执行哪些命令

ssh luser@linux02 ls -a
ssh luser@linux02 mkdir dir
ssh luser@linux02 rm -rf dir

7)将linux01上的文件拷贝到linux02上

scp 文件名 登录用户名@目标机器IP或主机名:目标目录
scp ./f1 luser@linux02:~

①为什么配置hosts?
为了通过主机名直接找到机器的ip地址
②实现原理
使用ssh-keygen在linux01 上生成private和public密钥,将生成的public密钥拷贝到远程机器linux02 上后,就可以使用ssh命令无需密码登录到另外一台机器linux02上。如果想互相登录,则要把公钥私钥都拷贝到远程机器linux02 上。


2.多机操作
1)新建一个op目录下的ips文件

mkdir op
cd op
vim ips
linux01
linux02

2)建一个ssh_all.sh文件并写入shell脚本

#! /bin/bash

#拿到外面传进来的命令
cmd=$*
#进入到当前脚本所在的路径
cd `dirname $0`
#获取当前目录的绝对路径
path_dir=`pwd`
#找到ips文件的位置,并查看里面的内容 赋给ips_arr
ips_arr=`cat ${path_dir}/ips`

for ip in ${ips_arr[*]}
do
        #拼接ssh命令:ssh用户名@主机名 命令
        cmd_="ssh luser@$ip $cmd"
        echo $cmd_
        #通过eval 实现动态执行命令
        if eval $cmd_; then
                echo 'ok'
        else
                echo 'fail'
        fi
done

3)执行shell脚本

sh ./op/ssh_all.sh ls

4)给权限让目录执行

chmod a+x ssh_all.sh
./ssh_all.sh ls
./ssh_all.sh 'ls | grep dir'

5)实现将一个机器内的文件拷贝到其他机器上的脚本
拼出 scp 文件名 登录用户名@目标机器IP或主机名:目标目录

#! /bin/bash

#脚本使用说明
# ./scp_all.sh f1 /home/luser/dir

#你要传的文件
source_=$1

#目标目录
target=$2

#先进入当前脚本的所在路径
cd `dirname $0`

#获取当前目录的绝对路径
path_dir=`pwd`

#找到ips文件的位置,并查看里面的内容 赋给 ips_arr
ips_arr=(`cat ${path_dir}/ips`)

for ip in ${ips_arr[*]}
do
        #拼接scp 命令: scp 你要传的文件 用户名@主机名:目标目录 
        cmd_="scp $source_ luser@$ip:$target"

        echo $cmd_


        #通过eval 实现动态执行命令
        if eval $cmd_ ; then
                echo 'ok'
        else
                echo 'fail'
        fi

done

你可能感兴趣的:(Linux)