包含SCP和SSH的bash脚本的一个密码提示

时间:2015-04-25 11:42:47

标签: bash ssh scp

在我的大学打印连接到互联网的打印机上的文件非常慢。因此,我正在编写一个脚本,用SCP将文件发送到远程计算机,通过SSH发送一系列命令,从远程计算机打印文档(与打印机有更好的连接),然后删除远程计算机上的文件计算机。

它就像一个魅力,但令人讨厌的部分是它提示输入密码两次,一次是用SCP发送文件,一次是通过SSH发送命令。怎么解决这个问题?我读过你可以使用身份文件吗?但事实是,多个用户将使用它,而且许多人对bash编程的经验非常有限,因此脚本必须做所有事情,包括创建文件。

用户主要使用Mac,远程计算机使用Red Hat。这是迄今为止的代码:

    #!/bin/sh

    FILENAME="$1"
    PRINTER="$2"

    # checks if second argument is set, else prompt for it
    if [ -z ${PRINTER:+x} ]; then 
        printf "Printer: ";
        read PRINTER;
    fi

    # prompt for username
    printf "CID: "
    read CID

    scp $FILENAME $CID@adress:$FILENAME
    ssh -t $CID@adress bash -c "'
    lpr -P $PRINTER $FILENAME
    rm $FILENAME
    exit
    '"

2 个答案:

答案 0 :(得分:3)

根本不需要复制文件;您只需通过标准输入将其发送到lpr即可。

ssh -t $CID@adress lpr -P "$PRINTER" < "$FILENAME"

ssh$FILENAME读取并将其转发给远程命令。)

答案 1 :(得分:0)

启动ssh-agent并将密钥添加到其中:

eval $(ssh-agent -s)
ssh-add            # here you will be prompted
scp "$FILENAME" "$CID@adress:$FILENAME"
ssh -t "$CID@adress" bash -c <<END
  lpr -P "$PRINTER" "$FILENAME"
  rm "$FILENAME"
END
ssh-agent -k       # kill the agent