sshpass 实现的SSH免交互密码登录和ARM移植
sshpass在ubuntu上的测试
安装:
sudo apt-get install sshpass
实例:
sshpass -p 'yourpassword' ssh root@192.168.5.103
这可以避免一次交互,
sshpass -p "root" ssh root@192.168.5.103
脚本的写法:
#!/bin/bash export SSHPASS='root' msg=$(sshpass -e ssh root@192.168.5.103 ls /home/root/) echo $msg
源码下载
网址:Non-interactive ssh password auth - Browse /sshpass at SourceForge.net
目前的最新版本是1.10,下载后解压
tar zxvf sshpass-1.10.tar.gz
交叉编译脚本:
文件命名为build.sh
#!/bin/bash
set -e
# 配置交叉编译环境变量
ARM_GCC_PATH="/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf"
export PATH=${ARM_GCC_PATH}/bin:$PATH
export CC=arm-linux-gnueabihf-gcc
export CFLAGS="-I${ARM_GCC_PATH}/include"
#全局变量
install_path=`pwd`/install_arm
local_rootfs_path=/home/lkmao/nfsroot/myrootfs
cur_dir=`pwd`
SUDO=""
function build_sshpath() {
echo "install path : $install_path"
mkdir -p $install_path
# 配置项目
./configure --host=arm-linux-gnueabihf
# 编译项目
make
# 安装到指定目录
make install prefix=$install_path
file $install_path/bin/sshpass
}
function port_sshpath() {
echo "port sshpath to rootfs"
if [ -z "$local_rootfs_path" ] ; then
echo "local_rootfs_path is null"
return
fi
${SUDO} cp $install_path/bin/sshpass $local_rootfs_path/usr/bin
${SUDO} chown root:root $local_rootfs_path/usr/bin/sshpass
echo "port sshpath to rootfs done"
}
function check_root() {
if [ `whoami` == "root" ];then
SUDO=""
echo "root user"
else
SUDO="sudo"
echo "not root user"
fi
}
#int main(int argc, char *argv[]){
check_root
shell_full_name=$0
shell_short_name="${shell_full_name##*/}"
echo shell_short_name=$shell_short_name
if [ "$shell_short_name" == "build.sh" ];then
echo "build sshpath"
build_sshpath
port_sshpath
if [ ! -e "port.sh" ];then
ln -s build.sh port.sh || echo "port.sh link build.sh failed"
echo "get root authority"
fi
if [ ! -e "port.sh" ];then
${SUDO} ln -s build.sh port.sh
fi
elif [ "$shell_short_name" == "port.sh" ];then
echo "port.sh"
port_sshpath
echo "port sshpath to rootfs done"
fi
echo "task done"
exit 0
# }
测试
命令行测试:
sshpass -p "password" ssh username@192.168.5.5
脚本测试:
#!/bin/sh
export SSHPASS='root'
msg=$(sshpass -e ssh root@192.168.5.103 ls /home/root/)
echo $msg
文件发送测试
sshpass -p "lkmao" scp sshpass_test.sh lkmao@192.168.5.111:/home/lkmao/