├── zymbit_image └── scripts │ ├── 06-clear_apt_cache.sh │ ├── 02-qemu.sh │ ├── 03-7500FastXP.sh │ ├── 01-tailscale.sh │ ├── 05-attestation_daemon.sh │ ├── 00-prelude.sh │ ├── 04-create_users.sh │ └── files │ ├── vm │ └── 7500FastXP.xml │ └── attestation_daemon.py ├── Taskfile.yml ├── patch_over_ssh ├── files │ └── auto-configure-zymbit.sh ├── add-auto-configure-to-zymbit.sh ├── harden-ssh-zymbit.sh └── script.py ├── access-ui.sh ├── 7500FastXP ├── HOW.md ├── service.py └── service_windows_encoding.py ├── README.md └── LICENSE /zymbit_image/scripts/06-clear_apt_cache.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | # Clear package manager cache 10 | apt-get clean 11 | rm -rf /var/lib/apt/lists/* 12 | -------------------------------------------------------------------------------- /zymbit_image/scripts/02-qemu.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | # Install QEMU and libvirt packages 10 | apt-get install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients 11 | 12 | # Enable and start libvirtd service 13 | systemctl enable libvirtd 14 | -------------------------------------------------------------------------------- /Taskfile.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | tasks: 4 | build: 5 | cmds: 6 | - | 7 | {{if eq OS "windows"}}powershell {{end}}docker run --rm --privileged -v {{.USER_WORKING_DIR | toSlash}}/workspace:/CustoPiZer/workspace -v {{.USER_WORKING_DIR | toSlash}}/zymbit_image/scripts:/CustoPiZer/workspace/scripts ghcr.io/octoprint/custopizer:latest 8 | preconditions: 9 | - test -d workspace 10 | - test -f workspace/input.img 11 | -------------------------------------------------------------------------------- /zymbit_image/scripts/03-7500FastXP.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | 10 | DEST_IMG="/var/lib/libvirt/images/7500FastXP" 11 | DEST_XML="/etc/libvirt/qemu/7500FastXP.xml" 12 | 13 | mkdir -p $DEST_DIR 14 | cp /files/vm/7500FastXP.xml $DEST_XML 15 | cp /files/vm/7500FastXP $DEST_IMG 16 | 17 | # Set appropriate permissions 18 | chmod 660 $DEST_XML 19 | chmod 660 $DEST_IMG 20 | chown root:libvirt-qemu $DEST_XML 21 | chown root:libvirt-qemu $DEST_IMG 22 | 23 | virsh autostart 7500FastXP 24 | -------------------------------------------------------------------------------- /zymbit_image/scripts/01-tailscale.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | # Install Tailscale 10 | curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg | tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null 11 | curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list | tee /etc/apt/sources.list.d/tailscale.list 12 | 13 | # Update package lists again and install Tailscale 14 | apt-get update 15 | apt-get install -y tailscale 16 | 17 | # Enable Tailscale service 18 | systemctl enable tailscaled -------------------------------------------------------------------------------- /zymbit_image/scripts/05-attestation_daemon.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | 10 | # Install Python dependencies 11 | apt install python3-cryptography python3-asn1crypto 12 | 13 | # Copy attestation daemon script 14 | cp /files/attestation_daemon.py /usr/local/bin/attestation_daemon.py 15 | 16 | # Create systemd service file for attestation daemon 17 | cat << 'EOF' > /etc/systemd/system/attestation.service 18 | [Unit] 19 | Description=Attestation Daemon Service 20 | After=network.target 21 | 22 | [Service] 23 | Type=simple 24 | ExecStart=/usr/bin/python3 /usr/local/bin/attestation_daemon.py 25 | Restart=always 26 | User=result_editor 27 | 28 | [Install] 29 | WantedBy=multi-user.target 30 | EOF 31 | 32 | # Enable and start the service 33 | systemctl daemon-reload 34 | systemctl enable attestation.service 35 | systemctl start attestation.service 36 | -------------------------------------------------------------------------------- /patch_over_ssh/files/auto-configure-zymbit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | # Check if running as root 6 | if [ "$EUID" -ne 0 ]; then 7 | echo "This script must be run as root" 8 | exit 1 9 | fi 10 | 11 | # Check if running on Debian 12 | if [ ! -f /etc/debian_version ]; then 13 | echo "This script only works on Debian-based systems" 14 | exit 1 15 | fi 16 | 17 | # Create working directory 18 | WORK_DIR=$(mktemp -d) 19 | 20 | # Copy script to working directory 21 | cp -r ./script.py "$WORK_DIR/script.py" 22 | mkdir -p "$WORK_DIR/zymbit_image" 23 | cp -r ./zymbit_image "$WORK_DIR/zymbit_image" 24 | 25 | # Enter working directory 26 | cd "$WORK_DIR" 27 | trap 'rm -rf "$WORK_DIR"' EXIT 28 | 29 | # Define custopi directory 30 | CUSTOPI_DIR="$WORK_DIR/zymbit_image" 31 | 32 | mkdir -p "$WORK_DIR/build" 33 | 34 | # Build script arguments 35 | SCRIPT_ARGS="--scripts-dir $CUSTOPI_DIR/scripts/ --build-dir $WORK_DIR/build" 36 | 37 | # Run script 38 | apt update 39 | apt install -y python3 python3-click 40 | python3 ./script.py $SCRIPT_ARGS 41 | 42 | echo "Setup Complete!" 43 | -------------------------------------------------------------------------------- /access-ui.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -xe 4 | 5 | # Check for required commands 6 | if ! command -v ssh &> /dev/null; then 7 | echo "ssh is not installed. Please install using:" 8 | echo "sudo apt-get install openssh-client" 9 | exit 1 10 | fi 11 | 12 | if ! command -v remote-viewer &> /dev/null; then 13 | echo "remote-viewer is not installed. Please install using:" 14 | echo "sudo apt-get install virt-viewer" 15 | exit 1 16 | fi 17 | 18 | # Get SSH URL from user 19 | read -p "Enter SSH URL (user@remote-server): " ssh_url 20 | 21 | # Validate SSH URL format (user@host) 22 | if [ -z "$ssh_url" ]; then 23 | echo "SSH URL cannot be empty" 24 | exit 1 25 | fi 26 | 27 | if ! [[ "$ssh_url" =~ ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_.-]+$ ]]; then 28 | echo "Invalid SSH URL format. Must be in the form: user@host" 29 | exit 1 30 | fi 31 | 32 | # Start SSH tunnel in background 33 | ssh -N -L 5900:localhost:5900 "$ssh_url" & 34 | ssh_pid=$! 35 | 36 | # Wait a moment for tunnel to establish 37 | sleep 5 38 | 39 | # Start remote viewer 40 | remote-viewer spice://localhost:5900 41 | 42 | # Clean up SSH tunnel when remote-viewer exits 43 | kill $ssh_pid 44 | -------------------------------------------------------------------------------- /zymbit_image/scripts/00-prelude.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | # PUT YOUR SCRIPT HERE 10 | 11 | # 1. Lock and disable login for the raspbian user 12 | USERS_TO_REMOVE=("pi", "zymbit") 13 | 14 | remove_user() { 15 | local username="$1" 16 | if id "$username" &>/dev/null; then 17 | echo "Locking the $username user..." 18 | usermod -L "$username" # Lock password 19 | usermod -s /usr/sbin/nologin "$username" # Disable shell (no login) 20 | 21 | # 2. Revoke privileges from known groups (just in case) 22 | for grp in sudo adm; do 23 | if getent group "$grp" | grep -q "$username"; then 24 | deluser "$username" "$grp" || true 25 | fi 26 | done 27 | 28 | # 3. Kill any processes using the user 29 | echo "Killing running processes for $username..." 30 | pkill -u "$username" || true 31 | 32 | # 4. Now remove user entirely 33 | echo "Removing $username user and home..." 34 | deluser --remove-home "$username" 35 | fi 36 | } 37 | 38 | # Remove each user in the array 39 | for user in "${USERS_TO_REMOVE[@]}"; do 40 | remove_user "$user" 41 | done 42 | -------------------------------------------------------------------------------- /patch_over_ssh/add-auto-configure-to-zymbit.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Exit on any error 4 | set -e 5 | 6 | # Get absolute directory of this script 7 | SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 8 | PARENT_DIR="$(dirname "$SCRIPT_DIR")" 9 | 10 | # Check required arguments 11 | if [ "$#" -ne 2 ]; then 12 | echo "Usage: $0 " 13 | exit 1 14 | fi 15 | 16 | REMOTE_USER="$1" 17 | REMOTE_HOST="$2" 18 | REMOTE_DIR="/home/$REMOTE_USER/setup-zymbit-pcr" 19 | 20 | # Create remote directory 21 | ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_DIR" 22 | 23 | # Copy required files 24 | echo "Copying files to $REMOTE_HOST:$REMOTE_DIR..." 25 | scp "$SCRIPT_DIR/script.py" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" 26 | scp "$SCRIPT_DIR/files/auto-configure-zymbit.sh" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" 27 | 28 | # Copy zymbit_image contents to remote workspace directory 29 | echo "Copying zymbit_image contents to $REMOTE_HOST:$REMOTE_DIR/workspace..." 30 | ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_DIR/workspace" 31 | scp -r "$PARENT_DIR/zymbit_image/"* "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/workspace/" 32 | 33 | echo "Files copied successfully to $REMOTE_HOST:$REMOTE_DIR" 34 | 35 | # Execute the auto-configure script on the remote machine 36 | echo "Running auto-configure script on $REMOTE_HOST..." 37 | ssh "$REMOTE_USER@$REMOTE_HOST" "cd $REMOTE_DIR && chmod +x auto-configure-zymbit.sh && sudo ./auto-configure-zymbit.sh" 38 | 39 | echo "Auto-configure script completed successfully on $REMOTE_HOST" 40 | -------------------------------------------------------------------------------- /7500FastXP/HOW.md: -------------------------------------------------------------------------------- 1 | # Windows XP VM for 7500 Fast PCR System 2 | 3 | This VM runs Windows XP SP3 with Windows SteadyState to provide a locked-down environment for running the ThermoFisher Scientific 7500 Fast PCR System software. 4 | 5 | This was necessary, because the PCR system uses proprietary USB drivers and protocol. 6 | 7 | There was no way of running the PCR system software without running it Windows XP. 8 | 9 | We've locked down the environment such that only results produced by the PCR Software can be signed. 10 | 11 | The signing of scientific results is done by a custom Python service that runs outside of the VM. 12 | 13 | The Windows XP VM communicates with the service via a virtio-serial device. 14 | 15 | ## Specifications 16 | 17 | ### Base System 18 | - Windows XP Professional SP3 (Pre-Activated) 19 | - Python 3.4.4 (Last Supported Version) 20 | 21 | ### Security & Restrictions 22 | - Windows SteadyState provides disk protection and user restrictions 23 | - Limits user to only running the 7500 Fast PCR software 24 | - Registry locked down to prevent modifications 25 | - All system changes are discarded on reboot 26 | 27 | ### Technical Details 28 | - Base image from: https://archive.org/details/XPProSP3ActivatedIE8WMP11 29 | - SteadyState from: https://archive.org/details/SteadyState 30 | - Custom Python 3.4.4 `win32service` to monitor for new results, copy them to the host 31 | - Python 3.12 script running on the host to sign the results 32 | - Communication via the virtio-serial device (virtualized serial port) 33 | 34 | ## Steps To Reproduce 35 | 36 | 1. Install QEMU/KVM and virt-manager 37 | 2. Create a new VM with the following parameters: 38 | - Arch: i686 39 | - Memory: 2048MB 40 | - Disk: 4GB 41 | - Network: virtio-net 42 | - Serial: virtio-serial 43 | - USB Passthrough: ID 0c2b:0300 Neuron, Inc. Hamamatsu C9254-01 44 | 3. Install the Windows XP SP3 image from the archive.org link 45 | 4. Install the SteadyState image from the archive.org link 46 | 5. Install Python 3.4.4 from the official source 47 | 6. Install the `win32service` and `asn1crypto` packages from the official source 48 | 7. Install the Python 3.4.4 service from the `service.py` file 49 | 8. Install the 7500 Fast PCR System Software (Can't Offer It Here, Obtained Under Service Agreement) 50 | 9. Use SteadyState to lock down the system and restrict the user to only running the 7500 Fast PCR System Software -------------------------------------------------------------------------------- /zymbit_image/scripts/04-create_users.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | set -e 3 | 4 | export LC_ALL=C 5 | 6 | source /common.sh 7 | install_cleanup_trap 8 | 9 | 10 | ### 11 | # Harmless 12 | ### 13 | 14 | USERNAME="7500Fast" 15 | useradd -m -s /usr/sbin/nologin "$USERNAME" 16 | 17 | USER_HOME=$(eval echo "~$USERNAME") 18 | SSH_DIR="$USER_HOME/.ssh" 19 | 20 | # Create .ssh directory with proper permissions 21 | mkdir -p "$SSH_DIR" 22 | chmod 700 "$SSH_DIR" 23 | chown "$USERNAME:$USERNAME" "$SSH_DIR" 24 | 25 | # Set proper permissions for authorized_keys 26 | touch "$SSH_DIR/authorized_keys" 27 | chmod 600 "$SSH_DIR/authorized_keys" 28 | chown "$USERNAME:$USERNAME" "$SSH_DIR/authorized_keys" 29 | 30 | # Create custom sshd config for this user 31 | cat > "/etc/ssh/sshd_config.d/${USERNAME}.conf" << 'EOF' 32 | Match User ${USERNAME} 33 | PasswordAuthentication no 34 | PubkeyAuthentication yes 35 | AllowTcpForwarding yes 36 | X11Forwarding no 37 | PermitTTY no 38 | PermitTunnel no 39 | AllowAgentForwarding no 40 | ForceCommand echo 'This account can only be used for port forwarding' 41 | PermitOpen localhost:5900 42 | EOF 43 | 44 | # Set proper permissions for the SSH config 45 | chmod 644 "/etc/ssh/sshd_config.d/${USERNAME}.conf" 46 | chown root:root "/etc/ssh/sshd_config.d/${USERNAME}.conf" 47 | 48 | ### 49 | # WiFi Setup 50 | ### 51 | 52 | NMTUI_USER="wifi_setup" 53 | 54 | # Create nmtui-shell script 55 | cat << 'EOF' > "/usr/local/bin/nmtui-shell" 56 | #!/bin/bash 57 | exec /usr/bin/nmtui 58 | EOF 59 | 60 | # Make the shell executable 61 | chmod 755 "/usr/local/bin/nmtui-shell" 62 | 63 | # Add the shell to allowed shells 64 | echo "/usr/local/bin/nmtui-shell" >> /etc/shells 65 | 66 | # Create user with restricted shell 67 | useradd -m -s /usr/local/bin/nmtui-shell "$NMTUI_USER" 68 | usermod -a -G netdev "$NMTUI_USER" 69 | 70 | ### 71 | # Results Publishing 72 | ### 73 | 74 | # Create results publishing user and group 75 | RESULTS_OWNER="result_editor" 76 | RESULTS_READER="harmless_reader" 77 | RESULTS_GROUP="result_readers" 78 | RESULTS_DIR="/var/lib/attestation_results" 79 | KEYS_DIR="/var/lib/pcr_attestation_keys" 80 | 81 | # Create the group 82 | groupadd "$RESULTS_GROUP" 83 | 84 | # Create users with no shell access 85 | useradd -M -s /usr/sbin/nologin "$RESULTS_READER" 86 | useradd -M -s /usr/sbin/nologin "$RESULTS_OWNER" 87 | 88 | # Add results reader to results group 89 | usermod -a -G "$RESULTS_GROUP" "$RESULTS_READER" 90 | 91 | # Forbid SSH access to results owner 92 | cat << 'EOF' > "/etc/ssh/sshd_config.d/${RESULTS_OWNER}.conf" 93 | DenyUsers ${RESULTS_OWNER} 94 | 95 | Match User ${RESULTS_OWNER} 96 | AllowTCPForwarding no 97 | X11Forwarding no 98 | EOF 99 | 100 | # Set proper permissions on SSH config 101 | chmod 644 "/etc/ssh/sshd_config.d/${RESULTS_OWNER}.conf" 102 | chown root:root "/etc/ssh/sshd_config.d/${RESULTS_OWNER}.conf" 103 | 104 | # Create results directory 105 | mkdir -p "$KEYS_DIR" 106 | mkdir -p "$RESULTS_DIR" 107 | 108 | # Set ownership and permissions 109 | # - Owner (results user) has read/write 110 | # - Group (results_readers) has read-only 111 | # - Others have no access 112 | chown "$RESULTS_OWNER:$RESULTS_GROUP" "$RESULTS_DIR" 113 | chmod 750 "$RESULTS_DIR" 114 | 115 | # Set ownership and permissions 116 | # - Owner (results user) has read/write 117 | # - Group (results_readers) has read-only 118 | # - Others have no access 119 | chown "$RESULTS_OWNER:$RESULTS_GROUP" "$KEYS_DIR" 120 | chmod 700 "$KEYS_DIR" 121 | 122 | # Create an SSH configuration snippet to restrict this user to SFTP-only, 123 | # chrooted into /var/lib/attestation_results for read-only access 124 | cat << 'EOF' > "/etc/ssh/sshd_config.d/${RESULTS_READER}.conf" 125 | Match User ${RESULTS_READER} 126 | ChrootDirectory ${RESULTS_DIR} 127 | ForceCommand internal-sftp 128 | AllowTCPForwarding no 129 | X11Forwarding no 130 | EOF 131 | 132 | # Secure permissions on the SSH config snippet 133 | chmod 644 "/etc/ssh/sshd_config.d/${RESULTS_READER}.conf" 134 | chown root:root "/etc/ssh/sshd_config.d/${RESULTS_READER}.conf" 135 | -------------------------------------------------------------------------------- /patch_over_ssh/harden-ssh-zymbit.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Automatic SSH key generation (ed25519) and SSH server hardening. 4 | # 5 | 6 | set -e # Exit on any error 7 | 8 | # Check if SSH is installed 9 | if ! command -v ssh &> /dev/null; then 10 | echo "SSH client is not installed. Installing..." 11 | apt-get update 12 | apt-get install -y openssh-client 13 | fi 14 | 15 | # Create .ssh directory if it doesn't exist 16 | if [ ! -d "$HOME/.ssh" ]; then 17 | mkdir -p "$HOME/.ssh" 18 | chmod 700 "$HOME/.ssh" 19 | fi 20 | 21 | read -rp "Enter the SSH key name: " BASE_KEY_NAME 22 | 23 | ############################################################################### 24 | # CONFIGURATION 25 | ############################################################################### 26 | # Path for the new SSH key. 27 | KEY_NAME="$HOME/.ssh/${BASE_KEY_NAME}_ed25519" 28 | 29 | # SSH port for the remote server (default 22) 30 | SSH_PORT=22 31 | 32 | ############################################################################### 33 | # USER INPUTS 34 | ############################################################################### 35 | read -rp "Enter the remote server username: " REMOTE_USER 36 | read -rp "Enter the remote server IP or hostname: " REMOTE_HOST 37 | 38 | # Check inputs 39 | if [[ -z "$REMOTE_USER" || -z "$REMOTE_HOST" ]]; then 40 | echo "ERROR: Remote username and hostname/IP must not be empty." 41 | exit 1 42 | fi 43 | 44 | ############################################################################### 45 | # 1) GENERATE SSH KEY PAIR (Ed25519) 46 | ############################################################################### 47 | echo "--------------------------------------------------------------------" 48 | echo "Step 1: Generating a new SSH key pair (ed25519): $KEY_NAME" 49 | echo "--------------------------------------------------------------------" 50 | # -t: key type 51 | # -f: file to save key 52 | # -N: passphrase (empty for no passphrase; consider using one for better security) 53 | # -C: comment 54 | ssh-keygen -t ed25519 -f "$KEY_NAME" -N "" -C "$BASE_KEY_NAME" 55 | echo "Key generation complete." 56 | 57 | ############################################################################### 58 | # 2) COPY THE PUBLIC KEY TO THE REMOTE SERVER 59 | ############################################################################### 60 | echo "--------------------------------------------------------------------" 61 | echo "Step 2: Copying the public key to the remote server." 62 | echo "--------------------------------------------------------------------" 63 | ssh-copy-id -i "${KEY_NAME}.pub" -p "$SSH_PORT" "$REMOTE_USER@$REMOTE_HOST" 64 | 65 | echo "Public key installed on $REMOTE_HOST." 66 | 67 | ############################################################################### 68 | # 3) DISABLE PASSWORD-BASED AUTH ON REMOTE SERVER & ENABLE PUBKEY AUTH 69 | ############################################################################### 70 | echo "--------------------------------------------------------------------" 71 | echo "Step 3: Updating SSH server configuration to disable password auth." 72 | echo "--------------------------------------------------------------------" 73 | 74 | ssh -p "$SSH_PORT" "$REMOTE_USER@$REMOTE_HOST" bash -s <<'ENDCONFIG' 75 | set -e 76 | 77 | # Use sudo for editing system config 78 | SSHD_CFG="/etc/ssh/sshd_config" 79 | 80 | # Remove all instances of the settings and add new ones 81 | sudo sed -i '/^[[:space:]]*#*[[:space:]]*(PasswordAuthentication|ChallengeResponseAuthentication|PubkeyAuthentication|PermitRootLogin)/d' "$SSHD_CFG" 82 | 83 | # Add the new settings at the end 84 | { 85 | echo "PasswordAuthentication no" 86 | echo "ChallengeResponseAuthentication no" 87 | echo "PubkeyAuthentication yes" 88 | echo "PermitRootLogin no" 89 | } | sudo tee -a "$SSHD_CFG" >/dev/null 90 | ENDCONFIG 91 | 92 | ############################################################################### 93 | # 4) RESTART SSH SERVICE 94 | ############################################################################### 95 | echo "--------------------------------------------------------------------" 96 | echo "Step 4: Restarting SSH service on the remote server." 97 | echo "--------------------------------------------------------------------" 98 | ssh -p "$SSH_PORT" "$REMOTE_USER@$REMOTE_HOST" "sudo systemctl restart sshd" 99 | 100 | echo "--------------------------------------------------------------------" 101 | echo "SSH hardening complete!" 102 | echo "Password-based login is disabled. Test your new key before logging out." 103 | echo "Connect with: ssh -i $KEY_NAME $REMOTE_USER@$REMOTE_HOST" 104 | echo "--------------------------------------------------------------------" 105 | -------------------------------------------------------------------------------- /zymbit_image/scripts/files/vm/7500FastXP.xml: -------------------------------------------------------------------------------- 1 | 2 | 7500FastXP 3 | cfc7b0a6-e7ac-49d7-abd9-7eb69077490f 4 | 5 | 6 | 7 | 8 | 9 | 2097152 10 | 2097152 11 | 4 12 | 13 | hvm 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | pentium3 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | destroy 37 | restart 38 | destroy 39 | 40 | 41 | 42 | 43 | 44 | /usr/bin/qemu-system-i386 45 | 46 | 47 | 48 | 49 |
50 | 51 | 52 |
53 | 54 | 55 | 56 |
57 | 58 | 59 | 60 |
61 | 62 | 63 | 64 |
65 | 66 | 67 | 68 |
69 | 70 | 71 |
72 | 73 | 74 | 75 | 76 | 77 |
78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
98 | 99 |