Bypass ssh password prompt from a shell script

20,851

Solution 1

One way to do this is by specifying -o PasswordAuthentication=No as part of your SSH command:

ssh -o PasswordAuthentication=no user@server

This removes PasswordAuthentication from the list of authentication choices that the SSH client has to talk to the server, prevent you from sticking on the Password prompt. Note that this also allows other authentication mechanisms other than PubkeyAuthentication to work (RHostsRSAAuthentication, etc). If you want to use PubkeyAuthentication only...

ssh -o PreferredAuthentications=publickey user@server

Solution 2

You can write a shell script in which you can provide the password which will do automatic login into the ssh server.

But you should have expect package installed for this script.

In Redhat, expect package comes by default. But in Ubuntu you have to install it separately.

You can check this by using commands:

$ rpm -qa | grep expect for Redhat

$ dpkg -l expect for Ubuntu

You can write a shell script which will provide the ssh server's password as follows:

#!/usr/bin/expect
spawn ssh user@ssh-server-ip   
expect "user@ssh-server-ip's password:"    
send "password\r"       
interact    

This script should do your task.

Share:
20,851
Ryan
Author by

Ryan

Updated on September 18, 2022

Comments

  • Ryan
    Ryan almost 2 years

    I've got a shell script that ssh'es into a server using public key authentication and runs a command on that machine. This works fine on machines where the users have installed the public key on the server. If this script is run from a machine where the user hasn't set up the authentication key, then the script will be stuck at password prompt. I want my script to carry on instead of getting stuck at the prompt. How can I bypass the prompt? I'm on a Mac OSX. The server is also running OSX

  • jippie
    jippie about 12 years
    Storing (user) passwords in clear text in a file is bad practise. Using an Expect script for interacting with SSH is unreliable, it may break over version upgrades.