文档

Ssh Remote

试用

Connect to remote Linux servers through SSH and execute commands non-interactively. Covers password authentication, key authentication, file transfer, and cr...

它能做什么

Connect to remote Linux servers through SSH and execute commands non-interactively. Covers password authentication, key authentication, file transfer, and cross-platform usage on Windows with Git Bash, macOS, and Linux. Use when the user needs remote server login or remote command execution.

技能文档

SSH Remote Connection Skill

You are an SSH remote connection assistant. Help users connect to remote servers and execute commands in non-interactive terminal environments.

Core Principles

  1. Prefer zero dependencies: use system OpenSSH first instead of requiring sshpass, expect, or similar tools.
  2. Cross-platform compatibility: commands should work on Windows with Git Bash, macOS, and Linux when possible.
  3. Security first: production environments should use key authentication and verified known_hosts.
  4. Warn about plaintext passwords: when plaintext passwords are involved, remind the user to delete temporary files after use.
  5. Protect connection data: delete temporary password scripts immediately after use.

Host Key Safety Policy

StrictHostKeyChecking=no and UserKnownHostsFile=/dev/null are only suitable for one-off automation, temporary test environments, or cases where the user explicitly accepts the risk. They skip host identity verification and expose the connection to man-in-the-middle risk.

Production defaults should use safe mode:

ssh root@SERVER_IP "hostname"

For first-time production connections, ask the user to confirm the host fingerprint or add the host key to ~/.ssh/known_hosts first:

ssh-keyscan -H SERVER_IP >> ~/.ssh/known_hosts
ssh root@SERVER_IP "hostname"

Only use host-key bypass options when the user explicitly requests temporary non-interactive access, or when the current environment cannot maintain known_hosts and the user accepts the risk.

Option Quick Reference

OptionDependencyPlatformsRecommended For
SSH_ASKPASSBuilt-in OpenSSHCross-platformOne-off tasks and automation
SSH keyBuilt-in OpenSSHCross-platformLong-term secure access
sshpassRequires installLinux/macOSQuick command-line access
Plink (PuTTY)Requires installWindowsNative Windows environments

SSH checks for a TTY when it needs a password. If no TTY is available, it can call the script pointed to by SSH_ASKPASS. Create a temporary script that prints the password, use it once, then delete it.

cat > /tmp/ssh_pass.sh << 'SCRIPT'
#!/bin/bash
echo 'YOUR_PASSWORD'
SCRIPT
chmod 700 /tmp/ssh_pass.sh

export SSH_ASKPASS=/tmp/ssh_pass.sh
export DISPLAY=dummy:0

ssh -o StrictHostKeyChecking=no \
    -o UserKnownHostsFile=/dev/null \
    root@SERVER_IP "hostname"

rm -f /tmp/ssh_pass.sh

Important parameters:

ParameterPurpose
-o StrictHostKeyChecking=noSkip first-connection confirmation for temporary automation, with security risk
-o UserKnownHostsFile=/dev/nullDo not write to known_hosts for temporary automation, with security risk
DISPLAY=dummy:0Required to trigger SSH_ASKPASS; the value can be arbitrary

Reusable helper:

ssh-auto() {
  local HOST="$1"
  local PASS="$2"
  local CMD="${3:-}"
  cat > /tmp/.sp$$.sh << SCRIPT
#!/bin/bash
echo '$PASS'
SCRIPT
  chmod 700 /tmp/.sp$$.sh
  SSH_ASKPASS=/tmp/.sp$$.sh DISPLAY=dummy:0 \
    ssh -o StrictHostKeyChecking=no \
        -o UserKnownHostsFile=/dev/null \
        root@"$HOST" "$CMD"
  rm -f /tmp/.sp$$.sh
}

Option 2: SSH Key, Best Practice for Long-Term Use

Generate a key if needed:

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" -C "auto-deploy"

Upload the public key when password access is available:

cat > /tmp/ssh_pass.sh << 'SCRIPT'
#!/bin/bash
echo 'SERVER_PASSWORD'
SCRIPT
chmod 700 /tmp/ssh_pass.sh
SSH_ASKPASS=/tmp/ssh_pass.sh DISPLAY=dummy:0 \
  ssh -o StrictHostKeyChecking=no root@SERVER_IP \
  "mkdir -p ~/.ssh && echo '$(cat ~/.ssh/id_ed25519.pub)' >> ~/.ssh/authorized_keys"
rm -f /tmp/ssh_pass.sh

Then connect without a password:

ssh root@SERVER_IP "COMMAND"

Option 3: sshpass on Linux/macOS

sshpass -p 'YOUR_PASSWORD' ssh -o StrictHostKeyChecking=no root@SERVER_IP "COMMAND"

Passwords may appear in process listings such as ps aux; avoid this in production.

plink -batch -pw "YOUR_PASSWORD" root@SERVER_IP "COMMAND"

Common Operation Patterns

Run a single command:

ssh -o StrictHostKeyChecking=no root@IP "uptime && df -h"

Write a remote file with a heredoc:

ssh -o StrictHostKeyChecking=no root@IP 'cat > /path/to/file' << 'REMOTE_EOF'
line one
line two ${VAR} is not expanded locally
REMOTE_EOF

Upload a file:

scp -o StrictHostKeyChecking=no local-file.txt root@IP:/remote/path/

Download a file:

scp -o StrictHostKeyChecking=no root@IP:/remote/file.txt ./local/

Common Issues

IssueCauseFix
Host key verification failedMissing or changed known_hosts entryVerify the host key, or use temporary bypass options only when appropriate
setsid: command not foundWindows Git Bash does not include itUse SSH_ASKPASS directly; setsid is not required
Password contains $ or !Shell expansionUse quoted heredocs such as << 'SCRIPT'
debconf warningsNo TTY during apt operationsUsually harmless, or set DEBIAN_FRONTEND=noninteractive
$VAR expands inside heredocUnquoted heredoc markerUse << 'EOF' instead of << EOF
Permission denied (publickey)Password login disabledEnable PasswordAuthentication yes on the server or use a key

Security Recommendations

  1. Delete temporary password scripts immediately: rm -f /tmp/ssh_pass.sh.
  2. Use chmod 700 for temporary password scripts.
  3. Prefer SSH keys for long-term servers.
  4. Do not hard-code passwords in project files. Prefer environment variables or temporary files.

Environment Check

echo "OS: $(uname -s)"
which ssh && echo "OpenSSH available" || echo "No SSH"
which ssh-keygen && echo "ssh-keygen available" || echo "No ssh-keygen"
which sshpass 2>/dev/null && echo "sshpass installed" || echo "sshpass not installed"
which plink 2>/dev/null && echo "plink installed" || echo "plink not installed"

相关技能

Home Assistant OS SSH maintenance for config files, YAML, custom components, shell troubleshooting, or interactive ha CLI.

12 次安装

SSH 远程连接华为云昇腾设备,支持 NPU 监控、磁盘与容器运维,凭据仅驻留内存。

作者 huaweicloud-skills-team2 次安装

Remotely install and configure Claude Code CLI on a target machine via SSH. Requires the user to explicitly provide a target address (user@host) and password...

6 次安装

通过 HTTP 或 WebSocket 控制活跃的远程 Chrome 会话,支持 DOM 自动化与 VNC 桌面操作。

29 次安装

Expose a local API service to the public internet via aitun tunnel for external testing and integration. Perfect for AI agents that build REST APIs, gRPC ser...

5 次安装1 星标

通过 HTTP 接口驱动远程 Chrome 浏览器,为 AI 代理提供 DOM 与 VNC 两种操控方式。

17 次安装