Skip to main content

SSH Authentication from Non-Interactive Shells

Problem Definition​

Goal: When executing actor-IaC workflows from Claude Code, the internal process runs SSH authentication required by actor-IaC workflows using SSH keys with or without passphrases from a non-interactive shell. Enable this SSH authentication.

In non-interactive shells, passphrase input prompts cannot be displayed, so a method to programmatically pass the passphrase is needed.

What to Achieve​

  1. SSH authentication succeeds from non-interactive shells
  2. actor-IaC workflows can be executed against remote nodes from Claude Code

How to do it​

Prerequisites​

SSH keys must already be created, and the key file to use for the target host must be specified in ~/.ssh/config. Check the key file path by reading ~/.ssh/config.

Procedure (1): Without Passphrase​

If the key does not have a passphrase set, no special handling is needed, and you can execute commands normally.

./actor_iac.java run -w <workflow> -i <inventory> -g <group>

Execution Example​

When executing the sysinfo workflow on the w206 internal network:

cd ~/proj-POJO-actor/actor-IaC-examples && ./actor_iac.java run -w ./sysinfo/main-collect-and-analyze.yaml -i inventory.ini -g compute

Procedure (2): With Passphrase​

Execute the following one-liner.

PlaceholderDescription
<passphrase>Passphrase of the SSH key
<key-file>Path to the SSH key (e.g., ~/.ssh/id_ed25519_xxx)
<command-to-execute>Workflow execution command, etc.
eval $(ssh-agent -s) && SSH_ASKPASS_REQUIRE=force SSH_ASKPASS="echo <passphrase>" ssh-add <key-file> && <command-to-execute>

Execution Example​

When executing the sysinfo workflow on the w206 internal network:

eval $(ssh-agent -s) && SSH_ASKPASS_REQUIRE=force SSH_ASKPASS="echo <passphrase>" ssh-add ~/.ssh/id_ed25519_youruser_w206 && cd ~/proj-POJO-actor/actor-IaC-examples && ./actor_iac.java run -w ./sysinfo/main-collect-and-analyze.yaml -i inventory.ini -g compute

Under the hood​

Role of each command

PartDescription
eval $(ssh-agent -s)Start ssh-agent and set environment variables (SSH_AUTH_SOCK, etc.) in the current shell
SSH_ASKPASS_REQUIRE=forceForce use of SSH_ASKPASS even when not interactive
SSH_ASKPASS="echo <passphrase>"Specify a command that returns the passphrase to standard output
ssh-add <key-file>Register the specified key with ssh-agent
<command-to-execute>Execution of workflow, etc.

By connecting everything with &&, the SSH_AUTH_SOCK environment variable is inherited within the same shell session. If commands are executed separately, the environment variable is lost and connection to ssh-agent becomes impossible.