1、介绍

SSH(Secure Shell)是一种用于计算机之间安全远程登录和其他网络服务的协议,它通过加密通信来确保在不安全的网络中也能安全地传输数据。SSH可以用于登录远程主机、执行命令和管理远程服务器。与Telnet协议不同,SSH提供了强大的加密和身份验证机制,能够有效防止窃听、篡改和伪造身份的攻击。SSH的默认端口是22,它通常与公共密钥加密技术一起使用,可以实现更加安全的身份验证。

2、用途

  • 登录远程服务器,进行系统管理和维护。

  • 通过SCP或SFTP安全地传输文件。

  • 端口转发,实现内网穿透或安全代理。

  • 自动化运维脚本的远程执行。

  • 实现服务器与服务器之间的免密登录。

3、下载

在大多数Linux发行版中,SSH客户端和服务器都已经默认安装好了。如果没有,需要通过以下步骤安装:

查看是否安装 openssh-server

yum list installed | grep openssh-server

或者

rpm -qa | grep openssh-server

如果没任何输出显示,表示没有安装 openssh-server,通过 yum 命令安装:

yum install openssh-server

安装成功后,启动SSH服务:

# 启动
systemctl start sshd
# 开机自启动
systemctl enable sshd

其他相关命令

# 查看启动状态
systemctl status sshd
# 重新启动
systemctl restart sshd
# 停止SSH服务
systemctl stop sshd
# 重新加载SSH配置(不中断现有连接)
systemctl reload sshd
# 禁用服务开机自启
systemctl disable sshd
# 查看SSH服务监听的端口
netstat -tnlp | grep sshd
# 查看SSH配置文件
cat /etc/ssh/sshd_config

4、免密登录

注意:

如果要在 Linux系统 A服务器 上实现免密登录到 B服务器 ,则需要在A服务器上生成 SSH 密钥对

4.1、创建密钥对

A服务器上面执行以下命令创建密钥对

ssh-keygen -t rsa -b 4096 -C "remark" 

# remark:密钥对公钥备注信息

执行成功后,在A服务器/root/.ssh 目录会生成 id_rsa 私钥文件和 id_rsa.pub 公有文件。如果执行命令的时候设置了生成文件目录,私钥和公钥文件会生成到指定的目录中。

4.2、将公钥复制到服务器端

执行成功后,在A服务器上面执行以下命令,将公钥文件远程拷贝到B服务器

ssh-copy-id username@server_ip_or_hostname

# 如果需要加端口号
ssh-copy-id -p 2222 username@server_ip_or_hostname username # B服务器的用户名称
server_ip_or_hostname # B服务器的访问IP或者代理主机名称

如果服务器没有 ssh-copy-id 命令,需要把id_rsa.pub 中的公钥内容进行手动保存到B服务器~/.ssh/authorized_keys 文件中。

4.3、验证服务器是否添加成功

远程登录到 B服务器 ,在 B服务器 中查看公钥是否拷贝成功。

cat ~/.ssh/authorized_keys

4.4、验证登录

ssh username@server_ip_or_hostname

# 如果需要加端口号
ssh -p <port_number> username@server_ip_or_hostname port_number # B服务器的端口号
username # B服务器的用户名称
server_ip_or_hostname # B服务器的访问IP或者代理主机名称

执行命令后,如果不需要输入密码就登录成功,说明ssh免密登录配置成功了。

4.5、设置权限

最后设置一下文件的访问权限,保障密钥数据安全。

# 查看权限:
ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys # 在B服务器中设置文件权限
chmod 700 ~/.ssh # 只有目录拥有者可以访问、修改和进入 .ssh 目录,其他人无法访问,保障密钥安全。
chmod 600 ~/.ssh/authorized_keys # 只有文件拥有者可以读取和修改 authorized_keys 文件,其他人无法访问,防止公钥被窃取或篡改 # 在A服务器中远程操作B服务器进行权限设置
ssh username@server_ip_or_hostname 'chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'

5、SCP

通过以上 SSH 配置已经实现了服务器免密登录,但是如果需要传输文件怎么办?答案就是可以使用SCP命令进行文件传输。

5.1、介绍

SCP(Secure Copy Protocol)是一个基于 SSH 协议的文件传输工具,用于在本地和远程系统之间或两个远程系统之间安全地复制文件。它可以加密文件传输过程,确保数据的机密性和完整性。SCP 在 Unix、Linux、macOS、Windows 等操作系统中都默认含有,使用 SCP 可以很方便的在各个服务器或者系统之间传输文件,是一种灵活、安全的文件传输工具,以下是SCP的特点:

  • 加密传输:SCP 使用 SSH 协议进行加密,保证数据在传输过程中的安全性。
  • 简单易用:SCP 命令行工具非常直观,可以在一行命令中实现文件的上传和下载。
  • 跨平台:支持在不同操作系统(Linux、macOS、Windows 等)之间传输文件。

5.2、下载安装

在大多数 Linux 和 macOS 系统上,scpopenssh 套件的一部分,通常默认安装。如果未安装,可以通过包管理器进行安装。

6、常用命令

scp 命令的基本语法如下:

scp [选项] [源文件路径] [目标路径]

# 远程服务器之间拷贝
scp [选项] [[用户@]源主机:]文件路径 [[用户@]目标主机:]文件路径

从本地复制到远程主机

# scp 本地文件 用户名@远程IP:远程路径
scp ~\Desktop\fileDir.zip username@host-ip:/opt/app
# 将本地的 fileDir.zip 文件 拷贝到服务器的 /opt/app 目录下面 username # 服务器用户名
host-ip # 服务器IP地址

从远程主机复制到本地

# scp 用户名@远程IP:远程文件路径 本地路径
scp username@host-ip:/opt/app/prod-application.yml ~/Desktop/ # 将服务器上面的 prod-application.yml 文件拷贝到本地的 Desktop 目录中 username # 服务器用户名
host-ip # 服务器IP地址

从远程服务器复制文件到远程服务器

# scp 用户名@远程IP:远程文件路径 用户名2@远程IP2:远程文件路径
scp user1@remote_host1:/path/to/remote/file.txt user2@remote_host2:/path/to/remote/directory
# 将远程服务器 remote_host1 中的 file.txt 文件拷贝到远程服务器 remote_host2 的 directory 目录中 user1 # 源文件服务器用户名称
remote_host1 # 源文件服务器IP user2 # 目标文件服务器用户名称
remote_host2 # 目标文件服务器IP

7、相关命令

常用选项:

  • -r:递归复制整个目录。
  • -P:指定远程主机的 SSH 端口(注意是大写 P)。
  • -C:启用压缩,提高传输速度(适合传输大文件)。
  • -i:指定 SSH 私钥文件,进行身份验证。
  • -v:启用详细模式,显示传输过程中的调试信息。

递归处理,复制整个目录:

scp -r user@remote_host:/path/on/remote/directory /path/to/local/

指定端口:

如果远程主机的 SSH 端口不是默认的 22,可以使用 -P 选项指定端口:

scp -P 2222 user@remote_host:/path/on/remote/file.txt /path/to/local/

指定私钥文件进行认证

scp -i /path/to/private_key /home/user/file.txt user@remote_host:/home/user/

SSH实现服务器之间免密登录的更多相关文章

  1. SSH远程登录:两台或多台服务器之间免密登录设置

    有两台(或多台)同局域网的服务器A:192.168.2.21,B:192.168.2.25.让A,B这两台服务器之间能两两互相免密登录,并且每台服务器都可以自我免密登录(自我免密登录即:ssh loc ...

  2. 两个linux服务器之间免密登录

    服务器A(假设为10.64.104.11) 免密登录服务器B(10.64.104.22) 1.登录服务器A 2.生成公私钥 ssh-keygen -t rsa 3.将生成的.pub文件发送到服务器B上 ...

  3. Linux服务器之间免密登录设置

    说明: A为linux服务器a B为linux服务器b 每台linux都有ssh的服务端和客户端,linux下的ssh命令就是一个客户端 我们常用ssh协议来进行登陆或者是文件的拷贝,都需要密码 A要 ...

  4. 【原】linux两台服务器之间免密登录方法

    搭建集群机器192.168.0.100和192.168.0.200里,需要两台机器中间相互拷贝文件: 方式一:下载192.168.0.100机器文件到本地,再将本地文件拷贝到B机器 方式二:192.1 ...

  5. 两台linux服务器之间免密scp,在A机器上向B远程拷贝文件

    两台linux服务器之间免密scp,在A机器上向B远程拷贝文件 操作步骤:1.在A机器上,执行ssh-keygen -t rsa,一路按Enter,不需要输入任何内容.(如有提示是否覆盖,可输入y后按 ...

  6. Linux服务器在SSH客户端如何实现免密登录

    一.SSH客户端Setting 配置 key ,  创建生成公钥导出文件. 二.服务器 master 上生成密钥 通过执行命令 ssh-keygen -t rsa 来生成我们需要的密钥. ssh-ke ...

  7. Centos7通过SSH使用密钥实现免密登录

    日常开发中,难免会有登录服务器的操作,而通过ssh方式登录无疑是比较方便的一种方式. 如果登录较频繁,使用密钥实现免密登录无疑更是方便中的方便.因此本文就简单说一说如何实现免密登录. 一.安装配置ss ...

  8. Centos7 通过SSH使用密钥实现免密登录

    Public Key认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接. Public Key认证的基础在于一对密钥,public key和private key,public key对 ...

  9. 【Mac】小技巧:实现ssh服务器别名免密登录

    前言 我们平常使用ssh user@host然后输入密码的方式来远程链接一个服务器,但是,如果要管理的服务器太多,记住这些服务器的IP和用户名.密码就是一个复杂的工作.当然,我们可以把这些信息用文档记 ...

  10. Linux服务器之间免密同步文件、重启R服务

    机器:ML-01/ML-02/ML-03 需求: 1.在ML-01上自动将文件同步至ML-02/ML-03 2.在ML-01上通过脚本重启ML-02/ML-03上的R服务 说明:以下示例中,ML-02 ...

随机推荐

  1. 地图可视化,根据绘制的图形生成缩略图,经纬度转换二维canvas坐标系

    一.h5在做可视化地图时,用高德地图绘制空域(圆形,线,多边形),碰到一个需求,根据绘制出来的图形给对应的空域列表项添加一个缩略图. 二.确定实现方法 要根据绘制的图形生成对应图形的缩略图,有两种方式 ...

  2. 写于vue3.0发布前夕的helloworld之四

    OK.接上回到render: with(this){return _c('div',{attrs:{"id":"app"}},[_v(_s(msg))])} 接 ...

  3. DCL(Double-checked Locking双重校验锁)实现单例模式的原理、问题与解决方案

    ​ 好的,要深入理解DCL(Double-Checked Locking)双重校验锁的原理.问题以及解决方法. 首先,我需要回忆一下单例模式的基本概念,因为DCL通常用于实现单例模式. 单例模式确保一 ...

  4. Delphi 使控件变成圆角的方法

    procedure RoundControl(Control: TWinControl; arc1, arc2: Integer); var R: TRect; Rgn: HRGN; begin wi ...

  5. GPU CPU运算时间测试

    GPU CPU运算时间测试 本文主要探讨GPU,CPU在做一些复杂运算的时间测试 实验任务 1.向量加法 两个相同维度的向量a,b做加法,分别测试GPU并行时间(包含数据拷贝时间),CPU串行时间. ...

  6. 【Linux】2.2 Linux安装

    安装 vm 和 Centos 学习 Linux 需要一个环境,我们需要创建一个虚拟机,然后在虚拟机上安装一个 Centos 系统来学习. 先安装 virtual machine ,vm12 再安装 L ...

  7. EntityFrameworkCore 中实体的几种配置方法

    使用数据注解 实体类通常是在Models目录下,直接在实体类上添加属性注解,比如[Required]/[Key]等. using System.ComponentModel.DataAnnotatio ...

  8. 话说Hangfire

    参考文档 www.hangfire.io github.com/HangfireIO/Hangfire .NET Core开源组件:后台任务利器之Hangfire

  9. FireDAC开发DataSnap应用系统【3】-使用TFDJSONDatasets的CRUD功能

    类别 说明 TFDJSONDeltas 包含异动的delta的类别.客户端存放deltade对象 TFDJSONDeltasWriter 把deltas写入TFDJSONDeltas TFDJSOND ...

  10. X86-64位简易系统开发 - 从BIOS阶段开始

    最近回顾之前写的代码的时候, 发现了以前本科时还开发过一个64位的操作系统, 不过最终也只是开发到进程切换部分 这是一个涉及到汇编和C语言的一个偏底层偏硬核的项目, 而且为了能够学到更多东西, 使用的 ...