【问题标题】:One password prompt for bash script including SCP and SSH一个 bash 脚本的密码提示,包括 SCP 和 SSH
【发布时间】:2015-07-04 01:45:06
【问题描述】:

在我的大学里,从连接到互联网的打印机打印文档真的很慢。因此,我正在编写一个脚本,该脚本使用 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
    '"

【问题讨论】:

  • if [ -z "$PRINTER" ]; then 也可以。

标签: bash ssh scp


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了!这要容易得多。它有效,但我收到此消息:“不会分配伪终端,因为标准输入不是终端。”
  • 哦,我认为这是来自现在不必要的 -t 选项,您可以摆脱它。
【解决方案2】:

启动一个 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

【讨论】:

  • 这假设用户一个密钥。
  • 当然,像这样编写脚本会强制(嗯,鼓励)他们创建密钥,这可能是件好事 :)
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2013-08-25
  • 2011-06-14
  • 2023-03-04
相关资源
最近更新 更多