(转载)ssh
ssh登录#
基本用法#
远程登录服务器:
ssh user@hostname
- user: 用户名
- hostname: IP地址或域名
第一次登录时会提示:
The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established.
ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes
,然后回车即可。
这样会将该服务器的信息记录在~/.ssh/known_hosts
文件中。
然后输入密码即可登录到远程服务器中。
默认登录端口号为22。如果想登录某一特定端口:
ssh user@hostname -p 22
配置文件#
创建文件 ~/.ssh/config
然后在文件中输入:
Host myserver1
HostName IP地址或域名
User 用户名
Host myserver2
HostName IP地址或域名
User 用户名
Port 映射的登录端口号
之后再使用服务器时,可以直接使用别名myserver1
、myserver2
密钥登录#
创建密钥:
ssh-keygen
然后一直回车即可。
执行结束后,~/.ssh/
目录下会多两个文件:
id_rsa
:私钥id_rsa.pub
:公钥
之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。
例如,想免密登录myserver
服务器。则将公钥中的内容,复制到myserver
中的~/.ssh/authorized_keys
文件里即可。
也可以使用如下命令一键添加公钥:
ssh-copy-id myserver
登出#
logout
或者 Ctrl + d
执行命令#
命令格式:
ssh user@hostname command
例如:
ssh user@hostname ls -a
ssh
远程执行命令中单引号与双引号的问题#
例如:
a=1
ssh myserver "echo $a" # 输出:1
ssh myserver 'echo $a' # 输出:空
双引号将命令在本地转义,故传过去的命令是echo 1
;单引号在本地不会将命令转义,故传过去的是echo $a
例如:
需要编写一个本地运行的shell脚本,可以在服务器上创建由脚本参数指定文件名的文件
#! /bin/bash
ssh myserver "mkdir -p homework/lesson_4/homework_4/\"${1}\""
ssh myserver "mkdir -p homework/lesson_4/homework_4/'${1}'"
分析一下:
- 需要在本地进行转义,所以需要使用双引号括起来或者不加
- 考虑到文件名可能含有空格,所以需要使用引号将
S{1}
单独括起来- 如果使用双引号,必须添加
\
进行转义,否则会将双引号识别为文件名的一部分 - 如果使用单引号,外层引号优先级更高,双引号在外可以解析内层单引号内部的变量值
- 如果使用双引号,必须添加
git bash配置SSH登录阿里云#
-
按照上面的步骤在git bash中配置云服务器别名和免密登录,云服务器用户名(user)是root, 地址(hostname)是分配的公网IP
-
登录之后是root用户,不建议使用该用户(权限过大),可以创建一个新的工作用户:
adduser XXX # 创建用户XXX
usermod -aG sudo XXX # 给用户XXX分配sudo权限
- 登录之后,阿里云ECS隔一段时间未操作会自动掉线,可通过以下操作关闭:
cd /etc/ssh
vim sshd_config # 该文件需要root用户才有权限修改
找到
#ClientAliveInterval 0
#ClientAliveCountMax 3
修改为
ClientAliveInterval 30
ClientAliveCountMax 86400
- 配置新服务器的工作环境 (可选,主要是个性化bash\tmux\vim的配置)
将AC Terminal的配置传到新服务器上:
scp .bashrc .vimrc .tmux.conf server_name: # server_name需要换成自己配置的别名
- 安装tmux和docker
登录自己的服务器,然后安装tmux
:
sudo apt-get update
sudo apt-get install tmux
打开tmux
。(养成好习惯,所有工作都在tmux
里进行,防止意外关闭终端后,工作进度丢失)
然后在tmux
中根据docker安装教程安装docker即可。
scp传文件#
基本用法#
命令格式:
scp source destination
将source
路径下的文件复制到destination
中
注意服务器的地址应该写为:user@ip:XXX
,user@ip:
表示服务器的/home/user/
地址
一次复制多个文件#
scp source1 source2 destination
复制文件夹:#
scp -r ~/tmp user@ip:/home/acs/
- 将本地家目录中的
tmp
文件夹复制到user@ip
服务器中的/home/acs/
目录下。
scp -r ~/tmp user@ip:homework/
- 将本地家目录中的
tmp
文件夹复制到user@ip
服务器中的~/homework/
目录下(默认处于服务器的/home/用户名/
路径下)
scp -r user@ip:homework .
- 将
user@ip
服务器中的~/homework/
文件夹复制到本地的当前路径下。
指定服务器的端口号#
scp -P 22 source1 source2 destination
注意: scp
的-r -P
等参数尽量加在source
和destination
之前。
使用scp
配置其他服务器的vim
和tmux
#
scp ~/.vimrc ~/.tmux.conf user@ip:
作者:yxc
链接:https://www.acwing.com/file_system/file/content/whole/index/content/2898266/
来源:AcWing
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构