- 首先在访问机上生成账户的密钥
清单 1. 生成密钥
ssh-keygen -N "" -t rsa -f ~/.ssh/id_rsa |
- 将密钥文件上传到被访问机上
清单 2. 复制密钥文件到目标机
scp -q ~/.ssh/id_rsa.pub root@$target_host:/tmp/ausaod01_rpub_key |
- 将密钥内容添加到被访问机器的系统用户的 /.ssh/authorized_keys 文件中
清单 3. 写入密钥内容
ssh root@$target_host \n "mkdir -p ~/.ssh; cat /tmp/ausaod01_rpub_key >> ~/.ssh/authorized_keys" |
至此,用户就可以在访问机上通过 ssh 命令直接访问被访问机,无需提示用户输入密码口令。
利用 Cygwin 实现平台互通的例子
对一个包含了 Linux 操作系统,Windows 2003 操作系统服务器的应用平台做性能数据采集,由于服务器数量比较多,因此,依次登录每台机器通过命令来采集服务器的性能数据即费时费力,产生的结果格式也不统一,不便于进行总结和分析。
为此,开发了一个 shell 脚本在一台服务器上运行,通过远程访问命令在应用平台中的各个服务器上上传并运行 shell 脚本采集性能数据并将结果传送回服务器。由于平台中有无法直接运行 shell 脚本的 Windows 操作系统,因此,无法与服务器进行互通,所以,需要在 Windows 操作系统上安装本文介绍的 Cygwin 软件,来制造类 Linux 环境运行脚本并实现与 Unix、Linux 服务器的互通。
首先,按照本文所述在 Windows 服务器上安装并配置 SSHD 服务,同时设置与性能数据采集服务器之间的无密码访问。
清单 4. 平台互通脚本实例
function startdetector { SSH_OPTIONS="-o StrictHostKeyChecking=no -o PasswordAuthentication=no -o loglevel=QUIET" ACCOUNTNAME='LogonAcc' HOSTNAME='TestMachine' PD_INSTALL_DIR='TestDIR' PD_SRC_DIR='ScriptDIR' SCRIPTNAME='TestScript' MACHINE_resultdir='ResultCollectionDIR' RESULTFILE='ResultFile' # 拷贝脚本文件到远端机器 ssh ${SSH_OPTIONS} "${HOSTNAME}" "rm -rf ${PD_INSTALL_DIR}; mkdir -p ${PD_INSTALL_DIR}" &>/dev/null scp ${SSH_OPTIONS} -r ${PD_SRC_DIR}/${SCRIPTNAME} ${ACCOUNTNAME}@${HOSTNAME}:${PD_INSTALL_DIR}/${SCRIPTNAME} \n &>/dev/null # 在本地创建结果目录 mkdir -p ${MACHINE_resultdir} &>/dev/null # 执行远端脚本监控数据 ( ssh $SSH_OPTIONS $ACCOUNTNAME@$HOSTNAME "${PD_INSTALL_DIR}/${SCRIPTNAME}" ) # 取回脚本执行结果 scp $SSH_OPTIONS ${ACCOUNTNAME}@${HOSTNAME}:${RESULTFILE} ${MACHINE_resultdir}/ &>/dev/null } |
该示例中定义了 SSH 命令参数,远端机器的用户名和机器名,本地脚本存放路径,脚本名,结果目录名,远端机器的脚本存放路径,结果保存目录等变量。实际的操作当中,完全可以将下面的操作该成循环的实现方式从而实现对多个远端服务器的监控。
例子中提到的脚本 TestScript 可以由读者任意编写,它可以是运行在 Linux 环境下的任何命令组成的脚本文件,包括文件的处理,性能的监控等操作。下面的脚本实现只实现了本文所介绍的环境互通方面的功能。读者还可以扩充脚本实例的功能来提高平台互通之间的交互性。
总结
通过本文所介绍的方法,读者可以在 Windows 服务器中创建类 Linux 环境来执行 shell 脚本并实现与 Linux 服务器之间的互通。 Cygwin 制造出来的类 Linux 环境可以使用户更灵活的制定应用平台的开发和测试方案,解决多平台应用系统给开发者带来的困扰,从而提高软件开发和测试的生产效率。(责任编辑:A6)