Linux 之SSH命令详解

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 

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

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 ~/"  

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

公钥登录

1、生成密钥

ssh-keygen -t rsa

直接按三次回车,之后会在用户的根目录下生成一个 .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

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

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

# 写到远程机器的 authorized_key 文件中
ssh-copy-id ubuntu@192.168.112.71

3、验证免密登陆

ssh localhost
ssh ubuntu@192.168.112.71
# 如果用户名相同,可以省略用户名
ssh 192.168.112.70

在这里插入图片描述
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/

2)包方式

sudo apt-get install sshpass

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

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

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

远程执行多台主机命令:

# 远程主机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$

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、制作密匙对:

[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]-----+

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
在 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

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

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

重启 SSH 服务。

systemctl restart sshd
或
ubuntu
/etc/init.d/ssh restart

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

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux系统中,可以使用ssh命令来发送命令。SSH(Secure Shell)是一种用于安全远程登录的协议。通过SSH,你可以在本地计算机上执行命令并将其发送到远程计算机上执行。要使用ssh发送命令,你需要知道目标服务器的IP地址和登录凭据。你可以使用以下命令格式发送命令: ssh username@remote_host command 其中,username是远程服务器上的用户名,remote_host是远程服务器的IP地址或主机名,command是你要在远程服务器上执行的命令。 例如,如果你要在IP地址为9.134.114.170的远程服务器上执行命令,可以使用以下命令: ssh root@9.134.114.170 command 请注意,在使用ssh发送命令之前,你需要确保本地计算机与远程计算机之间已经建立了SSH连接,并且你拥有足够的权限来执行命令。 引用提供了一个具体的例子,展示了如何使用ssh命令进行免密登录并发送命令到远程服务器。在这个例子中,使用了以下命令: ssh -p3600 root@9.134.114.170 command 其中-p参数指定了SSH连接的端口号,root@9.134.114.170是登录凭据,command是要发送的命令。 希望这可以帮助你理解如何在Linux系统上使用ssh发送命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ssh(1) command](https://blog.csdn.net/K346K346/article/details/104616612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [LinuxSSH命令详解](https://blog.csdn.net/const_/article/details/99290754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值