ssh免密登录、操作另一个服务器

目录

一、SSH简介

scp 传输文件

二、SSH免密登陆原理 

三、SSH免密登陆

1、生成密钥

2、将客户端公钥 配置到服务器端

方法一:

 方法二:

3、known_hosts


一、SSH简介

SSH(Secure Shell)是一种通信加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。

SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

扫描二维码关注公众号,回复: 10119135 查看本文章

加密算法包括:RSA、DSA等。

RSA:非对称加密算法,其安全性基于极其困难的大整数的分解(两个素数的乘积);
DSA:也是非对称加密算法,其安全性基于整数有限域离散对数难题;

scp 传输文件

scp(secure copy)linux系统下基于ssh登录进行安全的远程文件拷贝的命令。

# 传递文件到远程
scp local_file remote_username@remote_ip:remote_file
# 传递文件夹到远程
scp -r local_folder remote_username@remote_ip:remote_folder 
# 复制远程文件到本地,只是调换下文件参数位置即可
scp remote_username@remote_ip:remote_file local_file
远程拷贝的命令还有 rsyncscp消耗资源少,不会提高多少系统负荷,在这一点上, rsync就远远不及它了。 rsyncscp会快一点,但当小文件多的情况下, rsync会导致硬盘 I/O非常高,而 scp基本不影响系统正常使用。

scp相似的命令是cp,但是cp只能本机拷贝而不能跨服务器,因此需要与ssh合作构成scp命令。

我们直接使用scp来跨机器拷贝文件,会提示输入密码:

# 提示输入server端服务器的work用户密码
[[email protected] ~]$ scp test.php [email protected]:/home/work
[email protected]'s password: 

原因就在于,scp是先使用ssh连接服务端机器后,再使用网络来执行远程拷贝(cp)

可以参考ssh的过程:

# 同样的提示输入server端服务器的work用户密码
[[email protected] ~]$ ssh [email protected]
[email protected]'s password: 

为避免每次scp都输入用户名、密码,可通过ssh免密登录解决。

二、SSH免密登陆原理 

三、SSH免密登陆

   服务器环境:

机器 用户名 密码
192.168.26.134  master root 123456
192.168.26.131  slave1 test2 123456
192.168.26.133  slave2 test4 123456

1、生成密钥

分别在192.168.26.131、192.168.26.133、192.168.26.134机器的用户家目录(/home/用户名/)下,执行下列命令,通过RSA算法进行加密,提示输入的话可直接回车不输入任何内容:

ssh-keygen -t rsa

将会在家目录下的隐藏目录/.ssh下生成文件:

id_rsa.pub       //公钥   
id_rsa           //密钥

生成公钥、私钥可直接执行以下命令:

         ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

         参数说明: 
             -t 加密算法类型,这里是使用rsa算法 
            -P 指定私钥的密码,不需要可以不指定 
            -f 指定生成秘钥对保持的位置 

è¿éåå¾çæè¿°

2、将客户端公钥 配置到服务器端

方法一:

       将客户端slave1公钥发送个服务端 master,使用ssh-copy-id

     ssh-copy-id [email protected]    该命令需要输入test2的密码,来完成公钥拷贝。

注:经过ssh-copy-id后接收公钥的服务端会把公钥追加到服务端对应用户的$HOME/.ssh/authorized_keys文件中 .

这里写图片描述

 方法二:

1、追加公钥

在192.168.26.134机器上,将id_rsa.pub的内容写入authorized_keys文件中

cat id_rsa.pub >> authorized_keys

2、发送其他服务器公钥

在slave1机器上,将id_rsa.pub复制到master机器的/.ssh目录下,并重新命名位
id_rsa.pub.slave1

scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave1

在slave2机器上,将id_rsa.pub复制到master机器的/.ssh目录下,并重新命名位id_rsa.pub.slave2

scp id_rsa.pub hadoop@master:/home/hadoop/.ssh/id_rsa.pub.slave2

3、追加其他服务器公钥

在master机器上,在/.ssh目录下将看到从slave1、slave2发送过来的文件:

id_rsa.pub.slave1
id_rsa.pub.slave2

将这两个公钥内容追加写入到master机器/.ssh目录下的authorized_keys中:

cat id_rsa.pub.slave1 >> authorized_keys
cat id_rsa.pub.slave2 >> authorized_keys

4、确认公钥内容

在master机器上,查看authorized_keys文件内容,确认包含slave1、slave2机器的两个公钥内容:

cat authorized_keys

5、修改authorized_keys文件权限

分别在master、slave1、slave2机器上执行,对auhorized_keys进行权限修改,否则将无法实现免密码登录:

chmod 600 authorized_keys

6、SSH登陆测试

在master机器上,从master机器通过ssh登录到slave1,第一次需要密码,退出后以后登录就不需要密码了,其他机器类似操作:

//登陆slave1
ssh slave1

//登陆后退出
exit

//重新登陆
ssh slave1

3、known_hosts

     ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

避免警告的方法:

1. 手动删除修改known_hsots里面的内容; 
2. 修改配置文件“~/.ssh/config”,加上这两行,重启服务器。 
   StrictHostKeyChecking no 
   UserKnownHostsFile /dev/null 

优缺点: 
1. 需要每次手动删除文件内容,一些自动化脚本的无法运行(在SSH登陆时失败),但是安全性高; 
2. SSH登陆时会忽略known_hsots的访问,但是安全性低;

发布了13 篇原创文章 · 获赞 1 · 访问量 7804

猜你喜欢

转载自blog.csdn.net/weixin_40482816/article/details/103026939