Skip to main content

Command Palette

Search for a command to run...

Ssh小白入门教程一次弄懂ssh入门到精通

Published
2 min read
Ssh小白入门教程一次弄懂ssh入门到精通
C

a full stack developer with .NET/Python/Web

SSH 为 Secure Shell 的缩写,它是建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台,目前SSH在几乎所有 UNIX 平台上受到支持。

SSH 协议存在以下特征:

  • 有效防止远程管理过程中的信息泄漏
  • 传输 数据加密,能够防止DNS和IP欺骗
  • 传输 数据压缩,加快传输速度

1. 基础使用

OpenSSH 是 SSH协议的流行的免费开源实现。OpenSSH提供了服务端程序(openssh-server)和客户端工具(openssh-client)。

UNIX 平台系统(Linux/MacOS)等一般都默认安装了 SSH 客户端,直接在终端中使用SSH命令即可,Windows 等其它平台则需要手动安装 SSH 客户端,较常用的Windows SSH客户端有PuttyXShell等。

# 安装服务端/客户端(Ubuntu/Debian)
$ sudo apt install openssh-server/openssh-client

# 查看ssh服务是否开启
$ netstat -tlp | grep ssh

# 启动/停止/重启 ssh服务
$ sudo /etc/init.d/ssh start/stop/restart

SSH服务端配置文件默认为/etc/ssh/sshd_config,可以按需修改默认22端口等配置。

# 命令格式
$ ssh [-options] [user@hostname]
options含义
-p指定ssh端口号,默认端口为22
-i使用指定私钥文件连接服务器免密登录
  • user远程服务器登录的用户名,默认为当前用户
  • hostname远程服务器地址。可以是IP/域名/别名
  • exitlogout命令均可退出当前登录
# 以colin用户登录192.168.1.196的到ssh服务器
$ ssh colin@192.168.1.196

# 以colin用户登录到192.168.1.198的ssh服务器,使用2222端口
$ ssh -p 2222 colin@192.168.1.198

2. SSH高级配置

SSH配置信息一般保存在~/.ssh 目录下。

配置文件作用
known_hosts作为客户端。记录曾连接服务器授权。SSH第一次连接一台服务器会有一个授权提示,确认授权后会记录在此文件中,下次连接记录中的服务器时则不再需要进行授权确认提示
authorized_keys作为服务端。客户端的免密连接公钥文件
config作为客户端。记录连接服务器配置的别名

2.1 服务器别名

远程管理命令(如ssh,scp等)连接一台服务器时一般都需要提供 服务器地址、端口、用户名 ,每次输入比较繁琐,我们可以把经常使用的服务器连接参数打包记录到配置文件中并为其设置一个简单易记的别名。这样我们就可以通过别名方便的访问服务器,而不需要提供地址、端口、用户名等信息了。

配置方法如下:

  • 创建或打开 ~/.ssh/config,在文件追加服务器配置信息
  • 一台服务器配置格式如下
    Host ColinMac
      HostName 192.168.1.196
      User colin
      Port 22
    
    以上配置中只有HostName是必选项,其他都可按需省略。

配置完成后远程管理命令中就可以直接使用别名访问了。

$ ssh ColinMac
$ scp abc.txt ColinMac:Desktop

2.2 免密登录

# 命令格式
$ ssh-keygen [-options]
options含义
-t指定加密类型,默认为非对称加密(rsa), 所有可选项[dsa,ecdsa,ed25519,rsa]
-f密钥文件名。
-C注释,将附加在密钥文件尾部
  • 远程管理命令(如ssh,scp等)每次都需要提供用户密码保证安全。除此之外,我们也可配置使指定加密算法验证密钥文件的方式,避免每次输入密码
  • 配置免密登录后,ssh连接和scp等远程管理命令都不需要再输密码
  • 生成密钥时若指定了文件名,连接服务器时需要通过-i指定要验证的密钥文件,形如:ssh -i file user@host。默认文件名则可省略
  • 默认配置只需以下两步:
# 客户端生成密钥对
$ ssh-keygen

# 上传公钥到服务器
$ ssh-copy-id user@hostname   # 文件会自动上传为服务器特定文件 ~/.ssh/authorized_keys

完成以上步骤后直接使用ssh ColinUbuntu即可登录,服务器地址和密码均不用录入。

2.3 免密钥文件登录

出于安全考虑,大部分服务器提供商如要求使用密钥文件进行远程登录,如GCPAWS。下面我们以GCP为例来看如何简化连接操作,这搞起来吧...

2.3.1 生成密钥对

$ ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USERNAME]
$ chmod 400 ~/.ssh/[KEY_FILENAME]

https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys#createsshkeys

2.3.2 上传公钥

Compute Engine页面左侧菜单找到元数据,将上一步生成的公钥文件(KEY_FILENAME_pub)内容添加到SSH密钥中即可。

GCP上传密钥

2.3.3 连接GCP

使用以下命令登录即可

$ ssh -i ~/.ssh/KEY_FILENAME [USERNAME]@[IP_ADDRESS]

2.3.4 简化登录

以上是GCP官方步骤,使用IdentityFile方式进行登录,每次登录都要通过-i选项指定私钥路径比较繁琐,我们可以将密钥文件添加到ssh客户端config中以简化连接命令。

Host *
 AddKeysToAgent yes
 UseKeychain yes  # only for mac

Host tu
   HostName IP_ADDRESS
   Port 22
   User USERNAME
   IdentityFile ~/.ssh/gcp

按照以上配置添加到~/.ssh/config

# 后台运行ssh-agent
$ eval "$(ssh-agent -s)"
# 添加密钥到ssh-agent
$ ssh-add -K ~/.ssh/gcp

完成以上配置后,连接服务器只需使用 ssh tu即可。

除了连接云服务器,GitHub等服务也可是通过以上方式连接

3. SCP命令

scpsecure copy缩写,它基于SSH实现远程文件拷贝。scp命令只能在UNIX内核系统(如Linux/mac OS) 中运行。在Windows中文件传输推荐使用FTP工具,如FileZilla等。

# 命令格式
$ scp [-options] [[user@]host1:]file1 [[user@]host2:]file2
options含义
-r远程拷贝文件或递归拷贝目录
-P指定远程服务器端口号,默认22端口可以省略
# 将本地123.txt远程拷贝到192.168.1.196服务器的colin用户的Desktop目录并重命名为test.txt
$ scp 123.txt colin@192.168.1.196:Desktop/test.txt

# 将192.168.1.196服务器的colin用户的Desktop/test.txt远程拷贝到本地当前目录并重命名为123.txt
$ scp conlin@192.168.1.196:Desktop/test.txt 123.txt

# 将本地~/Desktop/Python拷贝到192.168.1.196服务器的colin用户的Desktop目录下
$ scp -r ~/Desktop/Python colin@192.168.1.196:Desktop

More from this blog

硬核Clash 配置教程,终极分流规则防配置覆盖

最近发现使用香港代理访问new bing貌似被封禁了,于是就要修改一下家里软路由的代理分流规则,因为手上的主力机是MacBook,好用的代理软件最常用的也是Clash X,那索性就一起搞了,正好有小伙伴问我想自定义Clash的分流规则,网上查了资料改是改了,结果一更新订阅链接,自己的辛辛苦亏写的配置就被无情的覆盖了,问我怎么避免这个问题。那就借此机会简单整理一个硬核一点的教程吧。 https://youtu.be/E86j-EwWKuM 很多同学看到一大坨的配置文件就头疼,其实大可不必,Cl...

Apr 29, 20234 min read71K
硬核Clash 配置教程,终极分流规则防配置覆盖

2023最新iPhone刷运动步数教程(非小米运动)

在现代社会,我们的生活方式越来越习惯于久坐不动,这对于我们的健康非常不利。而步数是衡量我们运动量的一种重要指标,为了更好地掌握自己的运动状态,很多人都在寻找一些方法来刷步数。 https://youtu.be/wR333Zn91rw 本文将介绍如何使用iPhone刷运动步数的方法。关于这个话题网络上的提供的方法大多都是使用小米运动(zeep life)APP,通过相关网站或者一些爱好者开发的应用程序(本质上都是通过发送API请求)修改其运动步数,然后再同步到iOS系统中进而修改iPhone中...

Apr 20, 20231 min read5.0K
2023最新iPhone刷运动步数教程(非小米运动)

Google Voice简单保号教程

Google Voice 是由 Google 提供的一项语音通信服务,它允许用户使用一个电话号码来接收和发送电话、短信和语音邮件等信息。Google Voice 提供了许多方便实用的功能,例如语音信箱转录、呼叫转移、呼叫筛选、呼叫记录等,同时还提供了许多免费或低成本的通信服务选项,例如国际长途、语音会议和互联网电话等。此外,Google Voice 还可以通过桌面和移动应用程序进行访问和管理,使其非常易于使用和管理。 Google Voice 有以下主要的优点: 一号多用:用户可以将自己的 G...

Apr 16, 20231 min read1.2K
Google Voice简单保号教程

加速阿里云服务器文件上传下载

在系统规模不大的情况下我们经常会将所有系统服务部署在一台服务器上,此时就经常需要在本地与服务器之间互传文件,如,下载服务器端程序运行日志,本地上传Docker镜像文件到服务器端等。 如果是较小的文件传输我们可以使用scp命令或搭建FTP服务使用各种FTP命令或工具进行文件传输,但如果传输文件较大时,将占用大量服务器带宽,且传输速度往往也被约束。下面笔者通过FTP下载阿里云VPS上一个1.78G的示例文件,下载速度仅有1.4M/s,耗时约25分钟。 类似于阿里云等知名服务器提供商除了提供基础的V...

Feb 3, 20231 min read172
加速阿里云服务器文件上传下载
A

A Nomad

29 posts

just a soul nomad