当前位置:   article > 正文

Linux 之SSH命令详解_ssh -x

ssh -x

ssh简介

Secure Shell(SSH) (远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。

ssh服务安装

SSH分为客户端 openssh-client 和服务器 openssh-server

1、确认电脑上是否安装了客户端和服务器
在这里插入图片描述
2、安装客户端和服务器

sudo apt-get install openssh-client 
sudo apt-get install openssh-server 
  • 1
  • 2

3、确认ssh服务是否启动
在这里插入图片描述

ssh服务操作相关命令

# ssh的配置文件
cat /etc/ssh/sshd_config

# ssh服务的关闭
centos:service sshd stop
ubuntu:sudo /etc/init.d/ssh stop

# ssh服务的开启:
centos:service sshd start
ubuntu:sudo /etc/init.d/ssh start

# ssh服务的重启
centos:service sshd restart
ubuntu:sudo /etc/init.d/ssh restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

ssh远程登录

口令登陆

# 端口一般用 22
ssh -l<用户名> -p<端口> <目标机器IP>
ssh -lubuntu -p22 192.168.112.72

ssh <用户名>@<目标机器IP>
ssh ubuntu@192.168.112.71

# 默认利用当前宿主用户的用户名登录
ssh 192.168.1.100

# 发送命令到远程机器并执行
ssh ubuntu@192.168.1.100 "ls ~/"  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

可以通过 Ctrl+D 或者 exit 命令退出远程登录。

公钥登录

1、生成密钥

ssh-keygen -t rsa
  • 1

直接按三次回车,之后会在用户的根目录下生成一个 .ssh 的文件夹。.ssh 文件夹下包含如下图的三个文件。
在这里插入图片描述

  • id_rsa:生成的私钥文件
  • id_rsa.pub:生成的公钥文件
  • known_hosts:已知的主机公钥清单
  • authorized_keys:存放授权过得无密登录服务器公钥

2、将公钥追加到 authorized_keys 文件中
authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。

# 将公钥追加到authorized_keys文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# 赋予 authorized_keys 文件权限
chmod 600 ~/.ssh/authorized_keys
  • 1
  • 2
  • 3
  • 4
  • 5

或者直接执行下面的复制命令。
ssh-copy-id会将公钥写到远程主机的 ~/.ssh/authorized_key 文件中。

# 写到本机的 authorized_key 文件中
ssh-copy-id ubuntu@localhost

# 写到远程机器的 authorized_key 文件中
ssh-copy-id ubuntu@192.168.112.71
  • 1
  • 2
  • 3
  • 4
  • 5

3、验证免密登陆

ssh localhost
ssh ubuntu@192.168.112.71
# 如果用户名相同,可以省略用户名
ssh 192.168.112.70
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
4、公钥免密登陆原理
实现免密登陆就是通过这里的一对公钥私钥。
公钥放到需要免密登陆的远程服务器上,公钥加密用。
私钥就在本机,私钥解密用。
在这里插入图片描述

  1. ssh 客户端向 ssh 服务器端发送连接请求
  2. ssh 服务器端发送一个随机的信息
  3. ssh 客户端使用本地的私钥对服务器端发送过来的信息进行加密
  4. ssh 客户端向服务器端发送加密过后的信息
  5. ssh 服务器端使用公钥对该信息进行解密
  6. 若解密之后的信息和之前发送的信息匹配,则信任客户端,否则不信任。

原理图2:
在这里插入图片描述

ssh带密码登录之sshpass

ssh登陆不能在命令行中指定密码。sshpass的出现,解决了这一问题。sshpass用于非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码。

它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。

其默认没有安装,需要手动安装,方法如下:
1、sshpass下载地址
http://sourceforge.net/projects/sshpass/ 下载为一个 tar.gz的压缩包。
2、安装
1)源码方式

tar -zxvf sshpass-1.05.tar.gz
cd sshpass-1.05
# 指定安装目录
./configure --prefix=/opt/sshpass 
sudo make
sudo make install
# 添加到可执行程序的根目录,这样可以在任何位置使用sshpass命令
sudo cp /opt/sshpass/bin/sshpass /usr/bin/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2)包方式

sudo apt-get install sshpass
  • 1

3、验证是否安装成功
在这里插入图片描述
用法介绍:

# 后跟密码
-p password
sshpass -p 123456 ssh ubuntu@192.168.112.71

#后跟保存密码的文件名,密码是文件内容的第一行
-f filename 
cat 1.txt
123456
sshpass -f 1.txt  ssh ubuntu@192.168.112.71

#将环境变量SSHPASS作为密码
-e
export SSHPASS=123456
sshpass -e ssh ubuntu@192.168.112.71
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

从命令行方式传递密码 -p指定密码:

sshpass -p '123456' ssh user_name@host_ip
sshpass -p '123456' scp root@host_ip:/home/test/t ./tmp/
  • 1
  • 2

远程执行多台主机命令:

# 远程主机IP
yangqian@yangqian:~/myShell$ cat 1.txt 
192.168.112.71
192.168.112.72

# 编写脚本
yangqian@yangqian:~/myShell$ cat a.sh 
#!/bin/bash
for i in $(cat ~/myShell/1.txt)
do
    echo $i
    sshpass -p123456 ssh root@$i 'ls -l'
done

# 执行脚本
yangqian@yangqian:~/myShell$ sh a.sh 
192.168.112.71
total 4
-rw-r--r-- 1 root root 399 Aug  9 15:55 id_rsa.pub
192.168.112.72
total 4
-rw-r--r-- 1 root root 399 Aug  9 15:55 id_rsa.pub
yangqian@yangqian:~/myShell$
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

SSH 通过密钥登录

密钥形式登录的原理是:利用密钥生成器制作一对密钥(一只公钥和一只私钥)。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。

ssh-keygen -m PEM -t rsa -b 4096 -f C:\ztest.pem
ssh-keygen -m PEM -t rsa -b 2048
  • 1
  • 2

1、制作密匙对:

[root@brace ~] # ssh-keygen -m PEM -t rsa -b 2048           <== 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):     			<== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again:    							<== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa.    <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub.    <== 公钥
The key fingerprint is:
SHA256:vfMD691TW5bF9tZHZYPsuQMWAoswwcz377glhXrov8w root@brace
The key's randomart image is:
+---[RSA 2048]----+
|  ++.  ..   . .  |
|   +o.. .. . o .o|
|    ....  . o .oo|
|       ... o o  =|
|       .S.o . .o=|
|      o .... o .O|
|     o oo.oo  .++|
|    . +.o..+.... |
|     ..Eo.. o... |
+----[SHA256]-----+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
在 root 目录下生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

2、在服务器上安装公钥

#  键入以下命令,在服务器上安装公钥
[root@brace ~]# cd .ssh
[root@brace .ssh]# ls
id_rsa  id_rsa.pub
[root@brace .ssh]# cat id_rsa.pub >> authorized_keys
# 如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确
[root@brace .ssh]# chmod 600 authorized_keys
[root@brace .ssh]# chmod 700 ~/.ssh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、设置 SSH,打开密钥登录功能

# 编辑 /etc/ssh/sshd_config 文件,进行如下设置:
# 表示允许 root 账户登录,但是不能以密码的方式登录,所以只能以公私钥的方式登录。
PermitRootLogin prohibit-password
# 禁用密码登录
PasswordAuthentication no
# 允许秘钥登录,一定要设置
PubkeyAuthentication yes
# Ubuntu 22.04 默认不支持RSA密钥类型,需要添加下面的配置
PubkeyAcceptedKeyTypes +ssh-rsa
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重启 SSH 服务。

systemctl restart sshd
或
ubuntu
/etc/init.d/ssh restart
  • 1
  • 2
  • 3
  • 4

4、下载私钥
在这里插入图片描述
使用xshell直接打开密钥登录:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/736490
推荐阅读
相关标签
  

闽ICP备14008679号