[ 工具 ] ___ Remote : OpenSSH

一、介绍


OpenSSH是一种安全的ShellSSH)协议的实现,它允许远程访问和管理计算机系统和网络设备。OpenSSH是一款免费、开源的软件,它包含了SSH协议的所有功能,比如加密的远程登录、文件传输和端口转发等功能。

OpenSSH由一个客户端(ssh)和一个服务器端(sshd)组成。客户端可以用于通过网络连接到远程计算机并执行命令,也可以用于文件传输和隧道转发等任务。服务器端则可以用于监听网络连接并提供远程访问服务。

OpenSSH支持多种身份验证方式,包括公钥身份验证、密码身份验证和Kerberos身份验证等,可以保证数据传输的完整性、机密性和认证性。此外,OpenSSH还提供了许多安全性选项,如限制访问、限制并发会话、限制端口等。

OpenSSH是一个广泛使用的工具,常用于Linux和其他UNIX系统上的远程访问和文件传输任务。它提供了一种安全和加密的方式来访问远程计算机和传输数据,从而保护用户的隐私和机密性。

OpenSSH最初是由OpenBSD项目开发的,但现在已经成为Linux和其他UNIX操作系统中广泛使用的标准SSH实现。许多Linux发行版和UNIX操作系统默认安装了OpenSSH

二、套件


OpenSSH 是一款安全的远程登录和文件传输软件,其具有完整的套件:

  • scp:轻量级的文件传输的工具,用于在本地主机和远程主机之间安全地进行文件传输;
  • sftp:功能强大的文件传输工具,提供交互式的文件传输,文件及目录管理;
  • ssh:提供在网络上远程登录、远程文件传输、远程命令执行、安全传输数据的功能;
  • ssh-add:用于将私钥添加到 SSH 身份验证代理的命令行工具,向ssh-agent添加私钥,以便进行身份验证和加密;
  • ssh-agent:管理私钥,以便在连接远程服务器时进行身份验证并安全地连接到远程服务器;
  • ssh-keygen:用于生成、管理和认证SSH密钥对的命令行工具;
  • ssh-keyscan:用于检索和管理SSH服务器的公钥的命令行实用程序;
  • sftp-server:是OpenSSH的关键组件,它提供了一种安全可靠的通过网络传输文件的方式;
  • sshdSSH守护进程,通过加密技术来保护传输的数据,同时也提供了身份验证机制,以防止未经授权的访问;
  • ssh-keysign:工具程序,它被用于验证用户的身份,并生成可信任的证书来进行身份验证;
  • ssh-pkcs11-helper:辅助工具程序,用于通过PKCS#11接口来管理加密设备的工具程序。它充当了SSH客户端和加密设备之间的中间人,提供了与加密设备的通信和管理功能;
  • ssh-sk-helper:辅助工具程序,用于通过FIDO2安全密钥来进行身份验证。FIDO2安全密钥是一种硬件安全设备,可以用于存储加密密钥和进行身份验证,是一种更安全和方便的身份验证方式。

以上套件组成了 OpenSSH 的核心功能,可以实现远程登录、文件传输、密钥管理和安全连接等多种功能。

三、获取


访问 官网 选择合适的方式 获取

四、构建


  • 依赖项
  1. 安装依赖;
localhost@linux:~$ sudo apt install autoconf make
  1. 加密算法支持:___ Library : OpenSSL
  2. 传输压缩支持:___ Library : Zlib
  • 创建安装目录,解压源码包,并进入目录进行配置
localhost@linux:~$ mkdir ~/openssh
localhost@linux:~$ tar zxvf openssh-x.y.tar.gz -C ~
localhost@linux:~$ cd openssh-x.y
localhost@linux:~/openssh-x.y$ ./configure --host=arm-none-linux-gnueabi --prefix=${HOME}/openssh --with-4in6 --with-libs --with-zlib=${HOME}/zlib --with-ssl-dir=${HOME}/openssl --with-ssl-engine --disable-etc-default-login --with-default-path=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin --exec-prefix=/usr/local --sysconfdir=/usr/local/etc --mandir=/usr/local/share/man
  • 指定对应的平台工具
localhost@linux:~/openssh-x.y$ sed  -i 's/STRIP_OPT=-s/STRIP_OPT=-s --strip-program=arm-none-linux-gnueabi-strip/g' Makefile
  • 指定安装位置
localhost@linux:~/openssh-x.y$ sed  -i 's/DESTDIR=/DESTDIR=${HOME}\/openssh/g' Makefile
  • 编译并安装
localhost@linux:~/openssh-x.y$ make
localhost@linux:~/openssh-x.y$ make install-files install-sysconf host-key

五、查看


  • 检查生成的程序是否是对应平台所需要的
localhost@linux:~/openssh$ file usr/local/bin/ssh
usr/local/bin/ssh: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, stripped 

六、启用


  • 打包程序依赖文件,以备上传至开发板进行环境搭建
localhost@linux:~/openssh$ cp ~/zlib/lib/* lib/ -r
localhost@linux:~/openssh$ cp ~/openssl/lib/* lib/ -r
localhost@linux:~/openssh$ cp ~/openssl/bin/* bin/ -r
localhost@linux:~/openssh$ tar zcvf openssh.tar.gz *
  • 解压至开发板赋予程序权限
root@arm:~# tar zxvf openssh.tar.gz -C /
root@arm:~# chmod +x /bin/* /usr/local/bin/* /usr/local/sbin/*
  • 添加环境变量并使其生效
root@arm:~# echo "export PATH=$PATH:/usr/local/bin:/usr/local/sbin" >> /etc/profile && source /etc/profile
  • 添加sshd用户并设置服务自启动
root@arm:~# echo "sshd:x:109:65534::/run/sshd:/usr/sbin/nologin" >> /etc/passwd
root@arm:~# echo "/usr/local/sbin/sshd" >> /etc/init.d/rcS
  • 设置用户密码
root@arm:~# passwd sshd
root@arm:~# passwd root
  • 生成SSH所需的所有主机密钥
root@arm:~# ssh-keygen -A && ssh-keygen -t rsa && ssh-keygen -t dsa && ssh-keygen -t ed25519 && ssh-keygen -t ecdsa
  • 将远程主机的公钥放置在本地的授权文件authorized_keys
# 远程主机
localhost@linux:~$ cat ~/.ssh/id_ecdsa.pub
localhost@linux:~$ cat ~/.ssh/id_ed25519.pub
localhost@linux:~$ cat ~/.ssh/id_rsa.pub
localhost@linux:~$ cat ~/.ssh/id_dsa.pub
# 本地主机
root@arm:~# touch ~/.ssh/authorized_keys && cat >> ~/.ssh/authorized_keys << EOF
#!/bin/sh

# 设定监听协议的版本并开启监听端口
echo "Protocol 2" >> /usr/local/etc/sshd_config
sed -i 's/#Port 22/Port 22/g' /usr/local/etc/sshd_config
sed -i 's/#ListenAddress ::/ListenAddress ::/g' /usr/local/etc/sshd_config
sed -i 's/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g' /usr/local/etc/sshd_config

# 设置目录和文件权限
chown root:root /var/empty -R
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys ~/.ssh/id_dsa ~/.ssh/id_ecdsa ~/.ssh/id_ed25519 ~/.ssh/id_rsa
chmod 600 /usr/local/etc/ssh_host_ecdsa_key /usr/local/etc/ssh_host_ed25519_key /usr/local/etc/ssh_host_rsa_key

# 指定主机私钥文件存放位置
sed -i 's/#HostKey \/usr\/local\/etc\/ssh_host_rsa_key/HostKey \/usr\/local\/etc\/ssh_host_rsa_key/g' /usr/local/etc/sshd_config
sed -i 's/#HostKey \/usr\/local\/etc\/ssh_host_ecdsa_key/HostKey \/usr\/local\/etc\/ssh_host_ecdsa_key/g' /usr/local/etc/sshd_config
sed -i 's/#HostKey \/usr\/local\/etc\/ssh_host_ed25519_key/HostKey \/usr\/local\/etc\/ssh_host_ed25519_key/g' /usr/local/etc/sshd_config

# 启用公钥认证(启用密码认证时,请把当中属性注释)
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /usr/local/etc/sshd_config

# 设置允许root用户进行远程登陆
echo "PermitRootLogin yes" >> /usr/local/etc/sshd_config

七、集锦


  • 错误:当前提示无法创建常规文件/usr/local/bin/ssh:权限被拒绝
localhost@linux:~/openssh-x.y$ make install
/usr/bin/install: cannot create regular file '/usr/local/bin/ssh': Permission denied
make: *** [Makefile:395: install-files] Error 1

这是因为我们安装的目标位置是在根目录下的,如果是普通操作则会没有权限进行创建文件。

  • 解决:我们重新指定有权限的位置进行操作。
localhost@linux:~/openssh-x.y$ sed  -i 's/DESTDIR=/DESTDIR=${HOME}\/openssh/g' Makefile
  • 错误
strip: Unable to recognise the format of the input file `/usr/local/bin/ssh'
/usr/bin/install: strip process terminated abnormally
make: *** [Makefile:395: install-files] Error 1`

通过查看/usr/bin/install --help,得知:

localhost@linux:~/openssh-x.y$ /usr/bin/install --help
  -s, --strip         strip symbol tables
      --strip-program=PROGRAM  program used to strip binaries

从这里我们可以得知,当前所需工具和正在使用版本不一致导致问题出现,

  • 解决:So,调整参数指定工具
localhost@linux:~/openssh-x.y$ sed  -i 's/STRIP_OPT=-s/STRIP_OPT=-s --strip-program=arm-none-linux-gnueabi-strip/g' Makefile
  • 错误:提示执行文件格式错误
localhost@linux:~/openssh-x.y$ make install
/usr/bin/bash: ${HOME}/openssh2arm/usr/local/sbin/sshd: cannot execute binary file: Exec format error
make: [Makefile:385: check-config] Error 126 (ignored)

查看Makefile我们得知

install: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf host-key check-config

可以看得出来,这里安装完毕之后还会检查配置,而此次我们使用的交叉编译工具链进行测试配置平台的处理器与开发板的不一致,内核匹配不了CPU,两者编译环境不同而导致如此。

  • 解决:去掉检查配置
localhost@linux:~/openssh-x.y$ make install-files install-sysconf host-key
  • 错误:用户和用户组权限不对导致服务启动不成功
root@arm:~# /usr/local/sbin/sshd
/var/empty must be owned by root and not group or world-writable.
  • 解决,将目录设置成 root 用户和 root 用户组
root@arm:~# chown root:root /var/empty -R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值