SSH

记录用自己的笔记本远程连接楼下实验室的服务器
服务器(服务端)监听端口,客户端向服务端发送指令,服务端接受指令
约定:local$ 以及 remote$ 等为命令行的提示符,不是输入的内容,用于区分当前是在哪台机子上。

SSH概念

SSH 为Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

远程登录

远程登录(rlogin)是一个 UNIX 命令,它允许授权用户进入网络中的其它 UNIX 机器并且就像用户在现场操作一样。一旦进入主机,用户可以操作主机允许的任何事情,比如:读文件、编辑文件或删除文件等。Rlogin:远程登录命令 rlogin:Remote Login in Unix systems

Secure Shell

SSH(Secure Shell)是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时,SSH都会自动对其进行加密。数据到达目的地时,SSH自动对加密数据进行解密。整个过程都是透明的,使用OpenSSH工具将会增进你的系统安全性。谈到网络安全访问,相信大家首先想到的就是安全Shell,也就是Secure Shell,通常简写为SSH。这是因为SSH安装容易、使用简单,而且比较常见,一般的Unix系统、Linux系统、FreeBSD系统都附带有支持SSH的应用程序包。

基础操作

在 Linux 系统上 SSH 是非常常用的工具,通过 SSH Client 我们可以连接到运行了 SSH Server 的远程机器上。SSH Client 的基本使用方法是:

ssh user@remote -p port
  • user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22

实际上,知道了上面这三个参数,用任意的 SSH Client 都能连接上 SSH Server,例如在 Windows 上PuTTY 就是很常用的 SSH Client。

local$ ssh user@remote -p port                                                      
user@remote's password:

在执行了 ssh 命令之后,远程机器会询问你的密码。在输入密码的时候,屏幕上不会显示明文密码,也不会显示 ******,这样别人就不会看到你的密码长度了,按下回车即可登入。

登入之后,你就可以操作远程机器啦!

安装OpenSSH Server

local$ ssh user@remote -p port 
ssh: connect to host remote port 22: Connection refused

如果你遇到了上面的消息,说明在远程机器上没有安装 SSH Server,特别地,如果远程机器运行的是 Ubuntu Desktop 系统,那么默认是没有安装 SSH Server 的。这个时候,你可以联系管理员让他安装 SSH Server,或者如果你有 sudo 权限的话,可以执行下面命令安装:

remote$ sudo apt-get install openssh-server

服务器设置

  1. 在服务器
  • 安装Synaptic (可选的, 只是一个包管理器)
  • 通过Synaptic安装openssh-server, openssh-sftp-server
    当然可以直接安装
    sudo apt-get install openssh-server
#(apt-get是ubuntu系统的命令。CentOS系统使用yum -y install openssh-server,下面雷同)

	  sudo vim /etc/ssh/sshd_config
或者   sudo gedit /etc/ssh/sshd_config

Port 22
#AddressFamily any
ListenAddress 0.0.0.0
ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key
MaxAuthTries 6
MaxSessions 10
ChallengeResponseAuthentication no
et PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
------------------------------有关传递图形界面--------------------------------
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes  #这一行是必须的,上面2行和下面2行暂时不清楚
#X11DisplayOffset 10
#X11UseLocalhost yes
---------------------------------------------------------------------------

#PermitTTY yes
PrintMotd no
#PrintLastLog yes

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

sudo systemctl enable sshd
# sudo systemctl disable sshd  这一行会删除文件,导致需要重新安装ssh

ifconfig # read the ip of ubuntu server
# 查看秘钥
sudo cat /etc/ssh/ssh_host_ecdsa_key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIC9VQhls/+aYwYyIHbLjFBm/Tp1inHHgV+/Xa0mb8hbxoAoGCCqGSM49
AwEHoUQDQgAE+GA9T1+P16lrOuCmPTuRB51pr0xkxX1QZdbeV2jMVlw9Ju7McfJ+
az6t3aJgAtBsjNxxQ1Mtcfpj0wM0wc8cbA==
-----END EC PRIVATE KEY-----
sudo cat /etc/ssh/ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPhgPU9fj9epazrgpj07kQedaa9MZMV9UGXW3ldozFZcPSbuzHHyfms+rd2iYALQbIzccUNTLXH6Y9MDNMHPHGw= root@AD102

客户端设置

  1. 在自己笔记本
  • 安装openssh-client【一般系统自动安装了】
    sudo apt-get install openssh-client
ssh ad102@ip # 客户端通过ssh协议与服务端相连
sftp # 接下来可以用put 和 get 命令在客户端和服务端传输文件
sudo nano /etc/hosts # 在文件中给ip起个别名

配置别名

上一节讲了在/etc/host中配置别名

每次都输入 ssh user@remote -p port,时间久了也会觉得很麻烦,特别是当 user, remote 和 port 都得输入,而且还不好记忆的时候。配置别名可以让我们进一步偷懒。

比如我想用 ssh lab 来替代上面这么一长串,那么在~/.ssh/config 里面追加以下内容:

Host lab
    HostName remote
    User user
    Port port

保存之后,即可用 ssh lab 登入,如果还配置了公钥登入,那就连密码都不用输入了。

Windows 用户使用 PuTTY 直接保存配置即可。

免密码登入

每次 ssh 都要输入密码是不是很烦呢?与密码验证相对的,是公钥验证。也就是说,要实现免密码登入,首先要设置 SSH 钥匙

执行ssh-keygen即可生成 SSH 钥匙,一路回车即可。Windows 用户可以使用PuTTY 配套的 PuTTYgen 工具。

local$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:47VkvSjlFhKRgz/6RYdXM2EULtk9TQ65PDWJjYC5Jys user@local
The key's randomart image is:
+---[RSA 2048]----+
|       ...o...X+o|
|      . o+   B=Oo|
|       .....ooo*=|
|        o+ooo.+ .|
|       .SoXo.  . |
|      .E X.+ .   |
|       .+.= .    |
|        .o       |
|                 |
+----[SHA256]-----+

这段话告诉了我们,生成的公钥放在了~/.ssh/id_rsa.pub,私钥放在了 ~/.ssh/id_rsa。接下来,我们要让远程机器记住我们的公钥。最简单的方法是local$ ssh-copy-id user@remote -p port

local$ ssh-copy-id user@remote -p port
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.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
user@remote's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user@remote' -p port"
and check to make sure that only the key(s) you wanted were added.

ssh-copy-id 在绝大多数发行版上都有预装,在 Mac 上也可以通过 brew install ssh-copy-id 一键安装。

  • 在没有 ssh-copy-id 的情况下(比如在 Windows 上),也是可以轻松做到这件事的。
    用命令的话也是一句话搞定

ssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
这句话的意思是,在远端执行新建 .ssh 文件夹,并把本地的 ~/.ssh/id_rsa.pub (也就是公钥)追加到远端的 .ssh/authorized_keys 中。当然,不使用这条命令的话,你也可以手动操作这个过程,即先复制公钥,再登入远程机器,粘贴到 .ssh/authorized_keys 当中。

在完成这一步之后,ssh 进入远程机器时就不用输入密码了。Windows 用户在 PuTTY 上面设置登入用户名和 PuTTYgen 生成的私钥之后也可以免密码登入。

linux远程关闭计算机

可以直接输入shutdown, 如果不进行取消操作将在一分钟后关机,
shutdown now 表示立刻关闭,当然这个now也可以换成 指定的时间
例如
shutdown 20:30 那么计算机将在20:30关闭 ,还可以
shutdown +10计算机将在10分钟后关机
可以关机自然可以重启
shutdown -r now 表示立刻重启

熟悉了关机指令后 让我们来看下如何远程关闭其他计算机

首先输入 ssh加上要访问的计算机的ip地址
然后系统会提示你输入计算及密码,按要求输入后会继续提示你 输入yes/no 我们直接输入yes 便连接到了指定ip地址的计算机
可以直接在这台计算机上进行指令操作,输入shutdown now 即可关闭指定计算机.
注: 可能会提示权限不足, 这时候我们输入sudo再次输入密码 然后输入关机指令即可关闭计算机.

sftp传输文件

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。(来自百度百科)

这里我们用sftp来对远程服务器和本地电脑上文件进行上传,下载操作。

用法:

连接远程服务器:

sftp username@ip

回车之后输入服务器密码即可连接成功。

将文件上传到服务器上:

put [本地文件的地址] [服务器上文件存储的位置]

将服务器上的文件下载到本地:

get [服务器上文件存储的位置] [本地要存储的位置]

保持程序在后台运行

有时候你想要在远程的机器上跑一个需要长时间运行的程序,比如一些计算,然后当你睡了一觉再登入远程的机子上却发现什么结果都没有。这是因为一旦 ssh 进程退出,所有它之前启动的程序都会被杀死。那么有什么办法可以保持程序在后台运行呢?

你需要在远程的机子上使用 tmux。tmux 是一个会话管理程序,他会保持程序一直运行着。在 Ubuntu 上你可以通过 sudo apt-get install tmux 来安装。

remote$ tmux

这样你就进入到了 tmux 管理的会话中,之后你再运行任何东西都不会因为你退出 ssh 而被杀死。要暂时离开这个会话,可以先按下 ctrl+b 再按下 d。要恢复之前的会话,只需要执行

remote$ tmux attach

最后强调一遍,tmux 应该运行在远程的机子上,而不是本机上,否则程序在 ssh 退出时依然会被杀死。

传递图形界面

先说配置

服务器

配置允许X11转发命令:

sudo gedit /etc/ssh/sshd_config ## 设置选项 
X11Forwarding yes

启动服务命令:

sudo /etc/init.d/ssh restart

客户端

  • 配置允许X11转发命令:
sudo gedit /etc/ssh/ssh_config ## 设置选项
ForwardAgent yes ##
ForwardX11 yes ##
ForwardX11Trusted yes ## 这个要设置,上面二项可以不要
  • 连接命令:
ssh -X 用户名@服务器IP "程序名" ## 直接运行一个程序
ssh -X 用户名@服务器IP # 或 先登陆再运行程序

再看怎么连接

上面我们都是在运行命令行程序,那如果远程有一些程序是不得不用图形界面的话,是不是无解了呢?实际上,恰恰相反,X11的设计天生就支持这样的行为。

首先,我们需要在本机装上X Server:Linux 桌面用户本身就已经有了 X Server,Windows 用户可以使用 Xming,Mac 用户需要使用 XQuartz。

安装好了 X Server 之后,我们通过 ssh -X 进行连接,例如:

local$ ssh -X remote
remote$ xeyes

现在你应该会看到一对傻傻的眼睛,这就说明成功了,注意,这个眼睛是跑在远程的,而输入和输出都是在本地。这个方法几乎可以运行任何图形界面的程序,比如你可以试试看运行 nautilus 或者 firefox。

参考

ssh基本用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值