Linux中的ssh和scp | 青训营

2023年 8月 26日 122.8k 0

SSH

远程登录服务器

ssh user@hostname

  • user 用户名
  • hostname IP地址或域名

之后再输入密码即可登录成功。

第一次连接服务器会让你确认是否登录,输入yes即可,这样会将该服务器的信息记录在~/.ssh/known_hosts文件中。

ssh默认使用的是22号端口,如果配置成了其他端口可以ssh user@hostname -p 22 将22换成其他端口号

退出服务器

exitctrl + d 都可以退出

保存服务器信息

每次登录服务器都要ssh 输入userhostname是有点繁琐的,我们可以保存服务器信息用一个别名替代。

具体操作如下:

  • 在家目录进入.ssh文件夹,如果没有直接mkdir .ssh创建一个就行了。可以使用ls -a查看是否有 .ssh 这个隐藏文件

  • 创建一个叫config的文件

  • 在文件中写入以下代码:

    Host myserver
        HostName IP地址或域名
        User 用户名
    
  • 这样我们就可以用 别名(myserver) 代替任何的 user@hostname 了。

    我们也可以在文件里面写多个服务器信息:

    Host myserver1
        HostName IP地址或域名
        User 用户名
    ​
    Host myserver2
        HostName IP地址或域名
        User 用户名
    

    ssh密钥(免密登录)

    user@hostname 已经配置好了不用记了,那么password 是不是也有方法可以不用记呢?

    我们可以使用ssh-keygen 生成一个密钥。输入ssh-keygen之后,会有三个问题:

    第一个问题是保存路径,回车默认就好,会保存在.ssh 文件夹中,

    第二个问题是密钥密码,默认的话就是无密码。

    第三个问题是确认密码。

    进入.ssh 文件夹发现多了两个文件

    • id_rsa 私钥,不能随便给别人看
    • id_rsa.pub (public)公钥,无所谓随便给

    为什么我要搞免密登录,还要多搞出来这几个密码呢?

    我们需要再一次使用密码登录服务器,在服务器上保存我们的 ssh公钥,让服务器知道我们是知道密码的可信赖用户,之后就可以不用密码登录服务器了。

    那么接下来进入服务器,在家目录下进入.ssh文件夹,如果没有的话创建一个就行了。

    将公钥中的内容,复制到服务器中的~/.ssh/authorized_keys文件里即可。多个密钥的话记得使用回车隔开

    到这里就成功了,我们ctrl + d退出服务器,再重新ssh登录服务器试一下,发现直接ssh + 之前取得别名就可以登录了。

    上面是具每一步骤的方法,我们也可以使用下面的命令一键式操作(生成密钥之后)。

    ssh-copy-id user@hostname ,这里的 user@hostname同样也可以使用别名代替,比如我之前设置的myserver

    当然,第一次添加也是需要输入密码的

    不登录运行服务器

    我们在终端中使用ssh user@hostname 'command' 可以直接在服务器上跑后面的command

    例如:

    ssh user@hostname 'ls -a' 输出的是服务器中的ls -a

    ssh myserver 'for ((i = 0; i < 10; i ++ )) do echo $i; done' 输出的是服务器中计算的结果

    SCP

    通过ssh实现的文件复制命令,可以用于实现在不同服务器中传文件

    命令格式:scp source destination,将source路径下的文件复制到destination

    一般从服务器之间传文件可以从服务器传到本地,再从本地传到服务器,可以避免服务器相互之间的授权问题。

    传文件

    source路径下的文件复制到destination中,这里的路径如果是其他服务器的话要写成user@hostname:路径

    例如将终端内的a.txt 传到myserver服务器的save文件夹中,这里save文件夹一定要存在不然会报错

    • scp a.txt myserver:save

    默认相对路径是home开始,这其实就相当于scp a.txt myserver:/home/save

    也可以重命名,例如scp a.txt myserver:save/b.txt

    传文件夹

    -r:如果是要上传文件夹的话需要在scp之后加上-r参数

    例如:scp -r dir myserver:save

    当然也可以重命名,如scp -r dir myserver:save/dir2

    一次传送多个文件/文件夹

    只要在source中空格隔开就行了

    命令格式:

    • scp source1 source2 destination

    多个source可以同时包含文件和文件夹,但是只要包含了文件夹就要记得加-r参数

    端口不为22

    ssh的默认端口是22,如果不是22的话我们可以使用-p 来指定端口

    命令格式:

    • scp -P 22 source1 source2 destination

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论