学习linux_Day4——SSH用法

SSH

通过ssh可以实现本地远程连接服务器,也能在本地远程连接的服务器上再远程连接到别的服务器,这个是允许进行套娃存在的。

SSH基本用法

远程连接服务器

ssh user@hostname

user指的是用户名,一般服务器默认的用户名是root,也能自己更改

hostname指的是服务器的IP地址或者域名

如果想要登录某一特定的端口

ssh user@hostname -p 端口号

退出服务器可以使用命令exit或者ctrl+d

配置文件

由于每次远程登录服务器要记住复杂的IP地址,因此我们可以在本地配置文件,给我们要连接的服务器取一个别名,之后就可以更方便地登录

创建配置文件~/.ssh/config

在文件中输入:

Host myserver1 #myserver1 就是一个服务器的别名
    HostName IP地址或域名
    User 用户名
# 回车空一行可以设置另外一台服务器的别名
Host myserver2
    HostName IP地址或域名
    User 用户名
# 之后就可以用别名进行ssh登录
ssh 别名

密钥登录

创建密钥,输入命令,然后一直回车

ssh-keygen

执行完命令之后,~/.ssh文件夹底下就多了两个文件id_rsa(私钥)和id_rsa.pub(公钥)

之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。

例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。

(一键配置)在获得密钥之后也可以使用如下命令一键添加公钥:

ssh-copy-id myserver

在这里插入图片描述

配置成功之后就可以免密登录了。

执行命令

通过本地Terminal对远程的服务器进行命令操作

ssh user@hostname command

例如:

ssh myserver ls -a
acs@0faa28a78e69:~/.ssh$ ssh myserver ls -a
.
..
.bash_logout
.bashrc
.cache
.profile
.ssh

或者

# 单引号中的$i可以求值,双引号中的$i不可以求值
ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'

关于SSH命令中的单引号和双引号问题

本地Terminal会首先将COMMAND进行一遍解析,然后将解析得到的结果传给远端地服务器,让服务器代替我们的Terminal对传进去的COMMAND进行解析再去执行

因此,我们可以知道,一个命令是要被解析两次

例如

ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done'

对于单引号中的命令,在本地解析之后就会得到纯字符串

ssh myserver for ((i = 0; i < 10; i ++ )) do echo $i; done

将这个纯字符串传到远端服务器,就会直接在服务器上的Terminal执行这段字符串所代表地命令

因此就可以执行

但是,如果是双引号

ssh myserver “for ((i = 0; i < 10; i ++ )) do echo $i; done”

在本地Terminal进行解析之后,首先他会将双引号中间的变量解析出来,由于本地没有变量i,默认为空,因此传过去地就是

for ((i = 0; i < 10; i ++ )) do echo ”“; done

最后在远端进行解析就会输出10次空。

再举一个例子

#! /bin/bash

ssh myserver mkdir homework/lesson_4/homework_4/\"$1\"

这是本地的remote_mkdir.sh文件,传进去一个参数作为文件夹名称,要求通过这个可执行文件对远端服务器进行创建文件的操作

首先在本地会先解析一次,得到

ssh myserver mkdir homework/lesson_4/homework_4/"name 1"

然后传送到远端就是

mkdir homework/lesson_4/homework_4/"name 1"

远端进行解析就可以成功创建name 1文件夹

但是如果没有转义呢?

ssh myserver mkdir homework/lesson_4/homework_4/"$1"

首先在本地得到

ssh myserver mkdir homework/lesson_4/homework_4/name 1

传送到远端执行的命令就是

mkdir homework/lesson_4/homework_4/name 1

会发现双引号被抹去了,这就导致,会创建两个文件夹

因此,总结就是

ssh命令中使用单引号,单引号中的所有变量都不会在本地进行解析引用

双引号中的所有变量会首先在本地进行解析引用,传到远端的时候双引号就会消失

想要让双引号保留,就使用斜杠进行转义

SCP传文件

scp source destination

source路径下的文件复制到destination

一次复制多个文件:

scp source1 source2 destination

复制文件夹:

scp -r ~/tmp myserver:/home/acs/

将本地家目录中的tmp文件夹复制到myserver服务器中的/home/acs/目录下。

scp -r ~/tmp myserver:homework/

指定服务器的端口号:

scp -P 22 source1 source2 destination

注意: scp-r -P等参数尽量加在sourcedestination之前。

使用scp配置其他服务器的vim和tmux

一般新的服务器中的vim和tmux是最普通的,需要自己取配置,我们可以将本地的

.vimrc.tmux.config文件scp到新服务器上就能实现配置了

你可能感兴趣的:(工程学习——Linux,linux,ssh,学习)