scribble

466300750.github.io

Blog GitHub

19 Oct 2018
ssh

ssh代理

详情参见文章

简单总结:

  1. 不同服务器用不同的密钥对,而不需要人为指定。
  2. 私钥被密码加密,可以避免重复输入。

SSH 参数配置有3个层次

  1. 命令行参数,如-p 10086, -i /path/to/identity_file 等选项来设置SSH的端口号或认证证书位置
  2. 针对某个用户的配置文件,所在路径为~/.ssh/config,默认是不存在的,需要手动创建
  3. 针对系统所有用户的配置文件,所在路径为/etc/ssh/ssh_config参数重要性的顺序也是1>2>3,即越近的配置重要性越高。这里主要讲述第2种情况下的配置方式,即针对~/.ssh/config文件的写法进行说明。

~/.ssh/config文件

一个示例的文件如下:

# configuration 1
Host cluster
	HostName 192.168.11.11
	User tom


# configuration 2
Host=aliyun
	Hostname=202.44.2.2
	User tom

我们想要ssh连接到上例中的#1配置的主机,则在命令行执行如下命令即可:ssh cluster

一个最有用的场景是使用scp在不同主机间传数据。没有配置之前,你得写很长的参数,如scp a.txt tom@192.168.11.11:~/

配置过上例中的文件后,这个任务可以简化成这样:scp a.txt cluster:~/

常见参数类型:

  • Host
  • HostName
  • User
  • Port
  • IdentityFile
  • AddKeysToAgent // 只有使用了密钥之后才会把它存储到agent。
  • UseKeychain // 记录密钥
  • StrictHostKeyChecking // 跳过yes回答
  • UserKnownHostsFile=/dev/null //避免host key fingerprint 修改后验证失败

/etc/ssh_config

在通过ssh登录到服务器上查看日志的时候,得到中文乱码,通过切换终端测试得到异常,通过以下的解决办法最终解决。

通过终端ssh登录到服务器时,得到异常: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory 解决办法是:
注释掉 /etc/ssh_config文件中的一行信息: # SendEnv LANG LC_*


Til next time,
at 20:42

scribble