Quantcast
Viewing latest article 2
Browse Latest Browse All 16

Answer by Mike Slinn for Can you set passwords in .ssh/config to allow automatic login?

Because I cannot find documentation on how to implement key-based authentication for a Windows ssh server I am forced to use password authentication to access files and directories hosted by Windows.

Below are working Python3 versions of the ssh and scp wrapper programs in the answer by @IngoKarkat. This assumes that you store the password in ~/.ssh/config just as he suggests:

# Allow specifying passwords for Host entries, to be parsed by ssh-wrapper and scp-wrapper.IgnoreUnknown PasswordHost foohost    User baruser    Password foobarpassword

Before running these programs first install the sshconf Python library:

$ pip3 install sshconf

These programs first attempt to find a password, and if none is available they fall back to key-based authentication.

Enhanced ssh

#!/usr/bin/env python3from __future__ import print_functionimport shutil, subprocess, sysfrom sshconf import read_ssh_configfrom os.path import expanduserc: str = read_ssh_config(expanduser("~/.ssh/config"))if len(sys.argv) == 1:  print(f"Usage: {sys.argv[0]} host [command]")  sys.exit(1)if shutil.which("sshpass") == None:  print("Please install sshpass and retry.")  sys.exit(2)host: str = sys.argv[1]try:  password: str = c.host(host)["password"]  command = [ "sshpass", f"-p{password}", "ssh", host ] + sys.argv[2:]except KeyError:  command = [ "ssh", host ] + sys.argv[2:]subprocess.run(command)

Enhanced scp

#!/usr/bin/env python3# Python3 version of https://askubuntu.com/a/878335/58760## See https://github.com/sorend/sshconf## pip3 install sshconffrom __future__ import print_functionimport shutil, subprocess, sysfrom sshconf import read_ssh_configfrom os.path import expanduserc: str = read_ssh_config(expanduser("~/.ssh/config"))if len(sys.argv) < 3:  print(f"""Usage:   {sys.argv[0]} /dir1 host2:/dir2  {sys.argv[0]} host1:/dir1 /dir2""")  sys.exit(1)if shutil.which("sshpass") == None:  print("Please install sshpass and retry.")  sys.exit(2)try:  host = sys.argv[1].rsplit(":", 1)[0]  password: str = c.host(host)["password"]  command = [ "sshpass", f"-p{password}" ] except KeyError:  try:    host = sys.argv[2].rsplit(":", 1)[0]    password: str = c.host(host)["password"]    command = [ "sshpass", f"-p{password}" ]   except KeyError:    command = [ ]command = command + [ "scp" ] + sys.argv[1:]subprocess.run(command)

Saving and Running

I stored the programs in the ~/.local/bin/ directory, which is the recommended Ubuntu directory for user scripts.

To use the programs, first make them executable. Assuming you stored them in ~/.local/bin/sshPass and ~/.local/bin/scpPass, type the following to make them executable:

$ chmod a+x ~/.local/bin/sshPass$ chmod a+x ~/.local/bin/scpPass

You can run them like this:

$ ~/.local/bin/sshPass hostName ls$ ~/.local/bin/scpPass hostName:fromFile toFile$ ~/.local/bin/scpPass fromFile hostName:toFile

You could also add this to ~/.bash_aliases, for *nix distros that support that, or your startup bash script:

alias ssh=~/.local/bin/sshPassalias scp=~/.local/bin/scpPass

Viewing latest article 2
Browse Latest Browse All 16

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>