远程服务与ssh

发布时间 2023-12-10 15:31:49作者: yysjdys

远程管理与ssh

ssh原理

使用ssh时,主要分为下面几步

  • 用户使用ssh user@host命令对远程主机发起登陆请求;
  • 远程主机将自己的公钥返回给请求主机;
  • 请求主机使用公钥对用户输入的密码进行加密;
  • 请求主机将加密后的密码发送给远程主机;
  • 远程主机使用私钥对密码进行解密;
  • 最后,远程主机判断解密后的密码是否与用户密码一致,一致同意登陆,否则反之。

基本使用

常用指令

1.登录远程ssh主机

ssh root(用户名)@192.168.28.30
//需要指定端口可加上-p22(默认22为ssh端口号)

2.让远程主机执行指定指令

ssh -p22 root@192.168.28.30 ls -ha /etc
//让远程主机显示etc目录中的所有内容(包括权限所属)

3.查看已连接的主机

cat .ssh/known_hosts

常用参数

-1	强制使用ssh协议版本1
-2	强制使用ssh协议版本2
-4	强制使用IPv4地址
-6	强制使用IPv6地址
-A	开启认证代理连接转发功能
-a	关闭认证代理连接转发功能
-b	使用本机指定的地址作为对位连接的源IP地址
-C	请求压缩所有数据
-F	指定ssh指令的配置文件,默认的配置文件为“/etc/ssh/ssh_config”
-f	后台执行ssh指令
-g	允许远程主机连接本机的转发端口
-i	指定身份文件(即私钥文件)
-l	指定连接远程服务器的登录用户名
-N	不执行远程指令
-o	指定配置选项
-p	指定远程服务器上的端口
-q	静默模式,所有的警告和诊断信息被禁止输出
-X	开启X11转发功能
-x	关闭X11转发功能
-y	开启信任X11转发功能

通过scp命令远程管理文件

scp命令用户不同主机之间的文件复制,SSH协议保证了复制的安全性

举例

1.将本地文件复制给远程主机

scp -p22 -r -p /root/file root@192.192.168.28.30:/tmp
//将远程客户端tmp目录中的内容下载到本机root目录下的file文件夹

2.将远程主机文件下载到本地

scp -p22 -r -p root@192.168.28.30:/root/file  /root
//将远程服务器root目录下file文件夹的内容下载到本机root目录

ssh自带的sftp功能

使用sftp在两台主机之前互相传递文件

使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高

使用方法

1.ssh连接远程主机
sftp -oPort=22 [用户名]@[远程主机ip]
//输入对应密码
//显示connected to [远程主机ip]
stfp>
2.基本命令
  • 往远程主机上传文件:用put
  • 从远程主机下载文件:用get
  • 退出:exit/[ctrl]+D
sftp> put /etc/hosts /tmp  //把本机/etc/host文件放到远程主机的/tmp目录
sftp> get /etc/hosts /root //从远程主机root目录取内容放到本机/etc/hosts中

sshd配置文件

sshd服务的配置信息保存在/etc/ssh/sshd_config文件中。运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多以井号开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的井号

sshd服务配置文件中包含的参数以及作用

参数 作用
Port 22 默认的sshd服务端口
ListenAddress 0.0.0.0 设定sshd服务器监听的IP地址
Protocol 2 SSH协议的版本号
HostKey /etc/ssh/ssh_host_key SSH协议版本为1时,DES私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH协议版本为2时,RSA私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH协议版本为2时,DSA私钥存放的位置
PermitRootLogin yes 设定是否允许root管理员直接登录
StrictModes yes 当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6 最大密码尝试次数
MaxSessions 10 最大终端数
PasswordAuthentication yes 是否允许密码验证
PermitEmptyPasswords no 是否允许空密码登录(很不安全)

安全密钥验证

  1. 在客户端主机中生成“密钥对”

    [root@localhost ~]# ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): 
    Created directory '/root/.ssh'.
    //选择钥匙对存放的位置,不写则默认存放在/root/./ssh/id_rsa
    Enter passphrase (empty for no passphrase): 
    //此步相当于填写查看钥匙对所需要的另一个密码,不填写默认无
    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:9+KE/GYBG6wjbCQ4o9j139nD9kkrL29bdAYd49kTvLo root@localhost.localdomain
    The key's randomart image is:
    +---[RSA 2048]----+
    |              .+ |
    |              .o*|
    | .     .      .++|
    |+ . o   +      o.|
    |o+ = . .S+.   . +|
    |o . + +..o.. . o.|
    |   . . oo.o=. o .|
    |        .+=.BE.+ |
    |         oo. OB. |
    +----[SHA256]-----+
    
  2. 把客户端主机中生成的公钥文件传送至远程主机

    [root@localhost ~]# ssh-copy-id 192.168.28.30
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@192.168.28.30's password:
    Number of key(s) added: 1
    Now try logging into the machine, with:   "ssh '192.168.28.30'"
    and check to make sure that only the key(s) you wanted were added.
    
  3. 对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在修改配置文件后保存并重启sshd服务程序

    [root@localhost ~]# vim /etc/ssh/sshd_config
    ..................
    65 PasswordAuthentication no
    //此处65指的是第65行
    ...................
    [root@localhost ~]#
    
  4. 在客户端尝试登录到服务器,此时无须输入密码也可成功登录

    [root@localhost ~]# ssh 192.168.28.30
    Last login: Fri Apr 19 17:12:37 2019 from 192.168.28.30
    

mobaxterm使用密钥登录

1.生成密钥

2.保存公钥私钥

3.上传公钥

4.测试无密码登录

image-20230711185326090

注意保存公私钥时指定一个自己能找到的地方

第一步按下generate以后鼠标记得左右移动,不然没有进度

利用软件的上传功能将公钥上传到服务器相应文件夹中

在mobaxterm中开启服务器私钥使用并删除先前保存的密码

退出当前连接重新连接

success!!!

管理远程会话

1.screen基本命令

-S      创建会话窗口
-d      将指定会话进行离线处理
-x      一次性恢复所有的会话
-Is     显示当前已有的会话
-wipe   把目前无法使用的会话删除

2.命令使用方法

2.1 创建screen会话
screen -S windows1
2.2 暂时离开,保留screen
[ctrl]+a+d
2.3 恢复会话
screen -r windows1
//如果忘记了,或者当时没有指定会话名,可以执行:
screen -ls screen
会列出当前存在的会话列表
2.4 关闭会话
exit

3.会话共享(实例)

1.演示者执行 screen -S test 创建一个screen会话
2.观众执行screen -x test 与演示者同步。

4.实际应用

在日常的生产环境中,其实并不是必须先创建会话,然后再开始工作。可以直接使用screen命令执行要运行的命令,这样在命令中的-切操作也都会被记录下来,当命令执行结束后screen会话也会自动结束

[root@locaLhost ~]# screen ping -c 4 www.baidu.com
[screen is terminating]
//如果ping命令不结束,screen窗口也会一直在