Search code examples
sshssh-agent

How to make ssh-add read passphrase from a file?


I am trying to add a key to ssh-agent and want ssh-add to read the password from the key file I'm using. How is this possible?

How do I automate this process from the shell script?


Solution

  • Depending on your distribution and on the version of ssh-add you may be able or not to use the -p option of ssh-add that reads the passphrase from stdin in this way:

    cat passfile | ssh-add -p keyfile
    

    If this is not working you can use Expect, a Unix tool to make interactive applications non-interactive. You'll have to install it from your package manager.

    I have written a tool for you in expect. Just copy the content in a file named ssh-add-pass and set executable permissions on it (chmod +x ssh-add-pass). You can also copy it to /usr/bin or /usr/local/bin to be accessible from the $PATH search.

    #!/bin/bash
    
    if [ $# -ne 2 ] ; then
      echo "Usage: ssh-add-pass keyfile passfile"
      exit 1
    fi
    
    eval $(ssh-agent)
    pass=$(cat $2)
    
    expect << EOF
      spawn ssh-add $1
      expect "Enter passphrase"
      send "$pass\r"
      expect eof
    EOF
    

    The usage is simply: ssh-add-pass keyfile passfile