初始化项目
This commit is contained in:
commit
cafd22d439
|
@ -0,0 +1,32 @@
|
||||||
|
# jianmu-runner-ssh
|
||||||
|
|
||||||
|
#### 介绍
|
||||||
|
用于通过ssh私钥免密登陆远程主机执行命令
|
||||||
|
|
||||||
|
|
||||||
|
#### 输入参数
|
||||||
|
```
|
||||||
|
JIANMU_SSH_PASS: 远程主机登陆密码
|
||||||
|
JIANMU_SSH_PRIVATE_KEY: 远程主机私钥
|
||||||
|
JIANMU_SSH_IP: 远程主机IP
|
||||||
|
JIANMU_SSH_PORT: SSH端口
|
||||||
|
JIANMU_SSH_USER: SSH连接用户
|
||||||
|
JIANMU_SSH_CMD: 远程执行的命令
|
||||||
|
```
|
||||||
|
#### 构建docker镜像
|
||||||
|
```
|
||||||
|
# 创建docker镜像
|
||||||
|
docker build --rm -f dockerfile/xxx -t jianmudev/jianmu-runner-ssh-cmd:${version} .
|
||||||
|
|
||||||
|
# 上传docker镜像
|
||||||
|
docker push jianmudev/jianmu-runner-ssh-cmd:${version}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 用法
|
||||||
|
```
|
||||||
|
docker run --rm \
|
||||||
|
-e JIANMU_SSH_PRIVATE_KEY=xxx \
|
||||||
|
-e JIANMU_SSH_HOST=xxx \
|
||||||
|
-e JIANMU_SSH_CMD=xxx \
|
||||||
|
jianmudev/jianmu-runner-ssh-cmd:${version}
|
||||||
|
```
|
|
@ -0,0 +1,10 @@
|
||||||
|
FROM docker.jianmuhub.com/library/alpine:3.17.0
|
||||||
|
|
||||||
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
|
||||||
|
RUN apk add --no-cache openssh-client && \
|
||||||
|
apk add --no-cache expect
|
||||||
|
|
||||||
|
COPY script /usr/local/bin/
|
||||||
|
|
||||||
|
COPY files/ssh_config /etc/ssh/ssh_config
|
|
@ -0,0 +1,65 @@
|
||||||
|
ref: scp_resource
|
||||||
|
version: 0.0.1
|
||||||
|
description: 支持跳板机复制本地文件到远程服务器, 须设置免密登录
|
||||||
|
inputParameters:
|
||||||
|
- ref: ssh_private_key
|
||||||
|
name: ssh私钥
|
||||||
|
type: SECRET
|
||||||
|
required: true
|
||||||
|
value: ""
|
||||||
|
description: "可以免密登陆目标主机的ssh私钥,必填"
|
||||||
|
- ref: remote_host
|
||||||
|
name: 远程服务器IP
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "ssh登陆的远程服务器的ip"
|
||||||
|
- ref: remote_port
|
||||||
|
name: 远程服务器端口
|
||||||
|
type: STRING
|
||||||
|
value: "22"
|
||||||
|
description: "ssh登陆所用端口,默认为22"
|
||||||
|
- ref: remote_user
|
||||||
|
name: 远程服务器连接用户
|
||||||
|
type: STRING
|
||||||
|
value: root
|
||||||
|
description: "ssh登陆时的用户,默认为root"
|
||||||
|
- ref: remote_file
|
||||||
|
name: 远程文件/目录路径
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "文件/目录上传的远程路径"
|
||||||
|
- ref: local_file
|
||||||
|
name: 本地文件/目录路径
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
value: ""
|
||||||
|
description: "需要上传的文件/目录路径,必填"
|
||||||
|
- ref: gateway_host
|
||||||
|
name: 跳板机服务器IP
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "ssh登陆的跳板机服务器的ip"
|
||||||
|
- ref: gateway_port
|
||||||
|
name: 跳板机端口
|
||||||
|
type: STRING
|
||||||
|
value: "22"
|
||||||
|
description: "ssh登陆跳板机所用端口,默认为22"
|
||||||
|
- ref: gateway_user
|
||||||
|
name: 跳板机连接用户
|
||||||
|
type: STRING
|
||||||
|
value: root
|
||||||
|
description: "ssh登陆跳板机时的用户,默认为root"
|
||||||
|
- ref: local_file
|
||||||
|
name: 临时文件/目录路径
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
value: ""
|
||||||
|
description: "临时文件/目录路径,必填"
|
||||||
|
spec:
|
||||||
|
image: 'docker.jianmuhub.com/yystopf/runner_ssh:0.0.1'
|
||||||
|
entrypoint:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
cmd:
|
||||||
|
- "/usr/local/bin/execute_scp"
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
ref: ssh_cmd
|
||||||
|
version: 0.0.1
|
||||||
|
description: 支持跳板机运行连接远程服务器,并支持执行脚本,须设置免密登录
|
||||||
|
inputParameters:
|
||||||
|
- ref: ssh_private_key
|
||||||
|
name: ssh私钥
|
||||||
|
type: SECRET
|
||||||
|
required: true
|
||||||
|
value: ""
|
||||||
|
description: "可以免密登陆目标主机的ssh私钥,必填"
|
||||||
|
- ref: remote_host
|
||||||
|
name: 远程服务器IP
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "ssh登陆的远程服务器的ip"
|
||||||
|
- ref: remote_port
|
||||||
|
name: 远程服务器端口
|
||||||
|
type: STRING
|
||||||
|
value: "22"
|
||||||
|
description: "ssh登陆所用端口,默认为22"
|
||||||
|
- ref: remote_user
|
||||||
|
name: 远程服务器连接用户
|
||||||
|
type: STRING
|
||||||
|
value: root
|
||||||
|
description: "ssh登陆时的用户,默认为root"
|
||||||
|
- ref: gateway_host
|
||||||
|
name: 跳板机服务器IP
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "ssh登陆的跳板机服务器的ip"
|
||||||
|
- ref: gateway_port
|
||||||
|
name: 跳板机端口
|
||||||
|
type: STRING
|
||||||
|
value: "22"
|
||||||
|
description: "ssh登陆跳板机所用端口,默认为22"
|
||||||
|
- ref: gateway_user
|
||||||
|
name: 跳板机连接用户
|
||||||
|
type: STRING
|
||||||
|
value: root
|
||||||
|
description: "ssh登陆跳板机时的用户,默认为root"
|
||||||
|
- ref: ssh_cmd
|
||||||
|
name: 执行命令
|
||||||
|
type: STRING
|
||||||
|
required: true
|
||||||
|
description: "需要在远程执行的命令"
|
||||||
|
spec:
|
||||||
|
image: 'docker.jianmuhub.com/yystopf/runner_ssh:0.0.1'
|
||||||
|
entrypoint:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
cmd:
|
||||||
|
- "/usr/local/bin/execute_ssh"
|
|
@ -0,0 +1,48 @@
|
||||||
|
# $OpenBSD: ssh_config,v 1.34 2019/02/04 02:39:42 dtucker Exp $
|
||||||
|
|
||||||
|
# This is the ssh client system-wide configuration file. See
|
||||||
|
# ssh_config(5) for more information. This file provides defaults for
|
||||||
|
# users, and the values can be changed in per-user configuration files
|
||||||
|
# or on the command line.
|
||||||
|
|
||||||
|
# Configuration data is parsed as follows:
|
||||||
|
# 1. command line options
|
||||||
|
# 2. user-specific file
|
||||||
|
# 3. system-wide file
|
||||||
|
# Any configuration value is only changed the first time it is set.
|
||||||
|
# Thus, host-specific definitions should be at the beginning of the
|
||||||
|
# configuration file, and defaults at the end.
|
||||||
|
|
||||||
|
# Site-wide defaults for some commonly used options. For a comprehensive
|
||||||
|
# list of available options, their meanings and defaults, please see the
|
||||||
|
# ssh_config(5) man page.
|
||||||
|
|
||||||
|
Host *
|
||||||
|
# ForwardAgent no
|
||||||
|
# ForwardX11 no
|
||||||
|
# PasswordAuthentication yes
|
||||||
|
# HostbasedAuthentication no
|
||||||
|
# GSSAPIAuthentication no
|
||||||
|
# GSSAPIDelegateCredentials no
|
||||||
|
# BatchMode no
|
||||||
|
# CheckHostIP yes
|
||||||
|
# AddressFamily any
|
||||||
|
# ConnectTimeout 0
|
||||||
|
StrictHostKeyChecking no
|
||||||
|
# IdentityFile ~/.ssh/id_rsa
|
||||||
|
# IdentityFile ~/.ssh/id_dsa
|
||||||
|
# IdentityFile ~/.ssh/id_ecdsa
|
||||||
|
# IdentityFile ~/.ssh/id_ed25519
|
||||||
|
# Port 22
|
||||||
|
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
|
||||||
|
# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
|
||||||
|
# EscapeChar ~
|
||||||
|
# Tunnel no
|
||||||
|
# TunnelDevice any:any
|
||||||
|
# PermitLocalCommand no
|
||||||
|
# VisualHostKey no
|
||||||
|
# ProxyCommand ssh -q -W %h:%p gateway.example.com
|
||||||
|
# RekeyLimit 1G 1h
|
||||||
|
IPQoS throughput
|
||||||
|
ServerAliveCountMax 5
|
||||||
|
ServerAliveInterval 60
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ ! -z "${JIANMU_SSH_PRIVATE_KEY}" ]]; then
|
||||||
|
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
chmod 700 ~/.ssh
|
||||||
|
echo -e "${JIANMU_SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
set -x
|
||||||
|
|
||||||
|
|
||||||
|
scp_expect
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "ERROR!Parameter is missing, ssh_private_key is required."
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ ! -z "${JIANMU_SSH_PRIVATE_KEY}" ]]; then
|
||||||
|
|
||||||
|
|
||||||
|
mkdir -p ~/.ssh
|
||||||
|
chmod 700 ~/.ssh
|
||||||
|
echo -e "${JIANMU_SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
|
||||||
|
chmod 600 ~/.ssh/id_rsa
|
||||||
|
set -x
|
||||||
|
|
||||||
|
|
||||||
|
scp_expect
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "ERROR!Parameter is missing, ssh_private_key is required."
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -0,0 +1,52 @@
|
||||||
|
#!/usr/bin/expect
|
||||||
|
set timeout -1
|
||||||
|
set local_file ${JIANMU_LOCAL_FILE}
|
||||||
|
set remote_user ${JIANMU_REMOTE_USER}
|
||||||
|
set remote_host ${JIANMU_REMOTE_HOST}
|
||||||
|
set remote_port ${JIANMU_REMOTE_PORT}
|
||||||
|
set remote_password ${JIANMU_REMOTE_PASS}
|
||||||
|
set remote_file ${JIANMU_REMOTE_FILE}
|
||||||
|
|
||||||
|
set gateway_user ${JIANMU_GATEWAY_USER}
|
||||||
|
set gateway_host ${JIANMU_GATEWAY_HOST}
|
||||||
|
set gateway_port ${JIANMU_GATEWAY_PORT}
|
||||||
|
set gateway_password ${JIANMU_GATEWAY_PASS}
|
||||||
|
set temp_file ${JIANMU_TEMP_FILE}
|
||||||
|
|
||||||
|
# 上传文件到跳板机
|
||||||
|
spawn scp -P $gateway_port -r $local_file $gateway_user@$gateway_host:~/$temp_file
|
||||||
|
|
||||||
|
expect {
|
||||||
|
|
||||||
|
"yes/no" { send "yes\r"; exp_continue }
|
||||||
|
|
||||||
|
"*password:" { send "$gateway_password\r" };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# 登录跳板机
|
||||||
|
spawn ssh -p $gateway_port $gateway_user@$gateway_host
|
||||||
|
expect {
|
||||||
|
|
||||||
|
"yes/no" { send "yes\r"; exp_continue }
|
||||||
|
|
||||||
|
"*password:" { send "$gateway_password\r" };
|
||||||
|
|
||||||
|
"*$ " {
|
||||||
|
# 从跳板机复制文件到目标主机
|
||||||
|
send "scp -P $remote_port -r $temp_file $remote_user@$remote_host:~/$remote_file\r"
|
||||||
|
expect {
|
||||||
|
"yes/no" {
|
||||||
|
send "yes\r"
|
||||||
|
exp_continue
|
||||||
|
}
|
||||||
|
"*password:" {
|
||||||
|
send "$remote_password\r"
|
||||||
|
}
|
||||||
|
"*$ " {
|
||||||
|
send "rm $temp_file\r"
|
||||||
|
expect "*$ " {send "exit\r"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/expect
|
||||||
|
set timeout -1
|
||||||
|
set remote_user ${JIANMU_REMOTE_USER}
|
||||||
|
set remote_host ${JIANMU_REMOTE_HOST}
|
||||||
|
set remote_port ${JIANMU_REMOTE_PORT}
|
||||||
|
set ssh_cmd ${JIANMU_SSH_CMD}
|
||||||
|
|
||||||
|
set gateway_user ${JIANMU_GATEWAY_USER}
|
||||||
|
set gateway_host ${JIANMU_GATEWAY_HOST}
|
||||||
|
set gateway_port ${JIANMU_GATEWAY_PORT}
|
||||||
|
|
||||||
|
# 登录跳板机
|
||||||
|
spawn ssh -p $gateway_port $gateway_user@$gateway_host
|
||||||
|
expect {
|
||||||
|
|
||||||
|
"yes/no" { send "yes\r"; exp_continue }
|
||||||
|
|
||||||
|
"*password:" { send "$gateway_password\r" };
|
||||||
|
|
||||||
|
"*$ " {
|
||||||
|
send "ssh -p $remote_port $remote_user@$remote_host $ssh_cmd\r"
|
||||||
|
expect {
|
||||||
|
|
||||||
|
"yes/no" { send "yes\r"; exp_continue }
|
||||||
|
|
||||||
|
"*password:" { send "$remote_password\r" };
|
||||||
|
|
||||||
|
"*$ " {send "exit\r"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue