Acwing - Linux基础课(四)- ssh

获取ssh教程配套的远程服务器账号的信息

homework 4 getinfo

通过ssh登录

未来进行开发的时候,肯定不止一台服务器。

我们只需要一个终端,然后可以通过ssh登录到各台服务器上,进行操作。

租服务器,需要

  • hostname:可以是ip地址,也可以是域名
  • user
  • password

本小节会讲解:ssh登录,免密登录配置等

基本用法

远程登录服务器

ssh user@hostname
  • user:用户名
  • hostname:IP地址或域名

第一次登录时会提示

The authenticity of host 'xx.xx.xx.xx (xx.xx.xx.xx)' can't be established.
ECDSA key fingerprint is SHA256:iy23yyCe013/l+kpDGxnbJTPpG8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

输入yes,然后回车即可。如此,会将该服务器的信息记录在~/.ssh/known_hosts文件中,随后输入密码即可登录到远程服务器中。

要退出远程服务器,输入exit即可,或者使用快捷键Ctrl + d

ssh默认使用的端口是22,如果想登录某一特定端口,使用

ssh user@hostname -p 22

配置文件

我们发现,使用ssh user@hostname进行登录,ssh后面那一串字符串还是太长了。此时我们可以通过配置文件,来给远程服务器配置一个简短的别名。

  • 创建文件:~/.ssh/config

  • 在文件中配置服务器的信息

    Host myserver1
    	HostName IP地址或域名
    	User 用户名
    
    Host myserver2
    	HostName IP地址或域名
    	User 用户名
    
  • 随后可以直接使用ssh myserver1进行登录

如果没有.ssh文件夹的话,可以自己手动创建一个

密钥登录

使用ssh,每次登录都要输入密码,很麻烦。如果想要免密登录,可以配置密钥登录,如下

  • 创建密钥

    ssh-keygen
    # 然后一直回车
    
  • 执行结束后,~/.ssh/ 目录下会多出两个文件:

    • id_rsa:私钥
    • id_rsa.pub:公钥

之后,想免密登录某台服务器,就将公钥放到那台服务器上面即可。

例如,想要免密登录myserver1服务器,则将公钥中的内容,复制到myserver1中的~/.ssh/authorizaed_keys文件(若不存在该文件,直接创建出来即可)(若有多个密钥,用换行隔开)

上面将公钥复制到远程服务器上的这一过程(将本地Terminal中的ssh公钥,复制到远程服务器~/.ssh/authorized_keys文件中), 也可以使用如下命令进行简化

ssh-copy-id myserver1

此时,直接ssh myserver1,发现直接就登录上去了。

执行命令(扩展)

有时(在自动化运维场景下),我们可能需要登录到一台远程服务器上,执行一个命令(或操作),然后退出。则可以使用如下的命令格式

ssh user@hostname command
# command 这条命令,会自动在服务器端执行

例如

ssh user@hostname ls -a

ssh user@hostname 'for((i=0;i<10;i++)) do echo $i; done'
# 加上双引号或者单引号
# 注意, 此处, 要使用单引号
# 因为shell脚本中的单引号不会带有变量解析,则会将单引号的内容当成一个字符串传递给远程服务器
# 远程服务器上再执行这条命令,则会成功解析到$i
# 如果这里用双引号, 由于shell脚本中双引号会带有变量解析, 则上面的字符串在本地就会进行解析, 而本地没有i变量,所以$i会被解析成空,随后传递到远程服务器执行,就是输出了10个空

这样带command的ssh,会将command在服务器端执行时产生的stdout,重定向到我们本地Terminal的stdout。即可以在本地Terminal直接看到远程服务器执行command后产生的输出。

当只有一台服务器时,我们可能会直接ssh登录,然后操作就是了。

但是,如果有100台服务器,都需要执行相同的一条命令,这时就不能一台一台服务器去登录,然后执行命令,退出(那样会把人累死)。

此时,使用带命令的ssh就非常的方便。

以后如果自己租云服务器,通常会得到一个root用户。但是做开发时不推荐在root用户下进行开发,因为root用户权限太大,容易把服务器搞坏。通常,租完服务器后,推荐先使用add user命令,创建一个用户

通过ssh传文件

scp是基于ssh封装的一个命令,通过scp可以传输文件到远程服务器

我们cp命令,是将本地的一个文件,复制到另外的位置。scp就是将网络上的一个文件,复制到另一个位置

命令格式

scp source destination
# 将 source 路径下的文件,复制到 destination 中

也可以一次复制多个文件

scp source1 source2 destination

复制文件夹:

例:

scp -r ~/tmp myserver1:/home/acs/
# 将本地家目录下tmp文件夹,复制到myserver1服务器中的/home/acs/目录下
scp -r ~/tmp myserver1:homework/
# 将本地家目录下的tmp文件夹,复制到myserver1服务器中的~/homework/目录下
scp -r myserver1:homework .
# 将myserver1服务器中的~/homework/文件夹,复制到本地的当前目录下

本地的路径很好定义,远程服务器的路径要怎么定义呢?

首先是服务器的地址user@hostname,或者用配置的别名,然后加上一个冒号,后面跟服务器内部的目录路径(这个路径是相对服务器上的家目录来的)

比如,在本地新建一个tmp文件夹,在tmp文件夹里新建一个a.txt

随后退出到tmp文件夹同级的目录下,执行命令

scp -r tmp myserver1:

即可将tmp文件夹拷贝到myserver1服务器的家目录下面

上面的示例都是本地和远程服务器之间的传输文件;如果想要在2台远程服务器(假设为A和B)之间传输文件呢?

通常,先将A上的文件,传输到本地,再从本地将文件传输给B(2步scp)

当然,也可以直接从A传输给B(前提是A和B之间要有ssh的授权)

由于scp是基于ssh,其传输文件使用的默认端口也是22,若要通过指定的端口来传输文件,则需要加上-P参数(注意是大写P),例如

ssh -P 22 source1 source2 destination

注意-r,-P等参数一定要放在开头,不要放在最后

scp的实际应用场景

使用scp来配置其他服务器的vimtmux(将本地的相关配置文件,传输到远程服务器上)

scp ~/.vimrc ~/.tmux.conf myserver1:

后面会讲thrift,这是一个rpc通信框架(同类型的rpc框架还有dubbo,gRpc,待确定)。可以用于多台服务器之间的通信。thrift是一个跨语言的rpc通信框架。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值